13.10 JSON_TRANSFORMの演算子MERGE
JSON_TRANSFORM
の演算子MERGE
は、指定されたフィールドをオブジェクトにマージします(場合によってはそのオブジェクトを作成します)。
これは、RHSのパス式で一致したフィールド(名前と値)を、LHSのパス式で対象となっているオブジェクトのメンバーとして追加します。
RHSで指定されているフィールドがすでにLHSに存在する場合、結果では、RHSにあるフィールド値が使用されます。RHSで同じフィールドが複数回指定されている場合、結果では、一致のシーケンス内の最後のフィールドが使用されます。
ヒント:
ハンドラCREATE ON MISSING
を使用すると、LHSが対象とする欠落しているオブジェクトを作成して、RHSで指定されたフィールドから入力できます。
例13-19 集合としての配列2つのマージ
このMERGE
操作の結果であるオブジェクト内の配列a
は、配列$.a
と$.b
をマージしたものです(つまり、入力配列a
とb
)。入力配列b
にあるフィールドz
は、結果では、配列a
に追加されています。配列b
にあるフィールドy
は、結果の配列a
で使用されています。つまり、配列b
のy
の値が、配列a
のフィールドy
の新しい値として使用されています。
結果となるオブジェクト内の配列b
は変更されていません。
SELECT json_transform('{"a":{"x":1, "y":2}, "b":{"y":3, "z":4}}',
MERGE '$.a' = PATH '$.b')
結果:
{"a":{"x":1, "y":3, "z":4}, "b":{"y":3, "z":4}}
演算子MERGE
で使用できるハンドラは次のとおりです:
-
ERROR ON MISSING
(デフォルト)、IGNORE ON MISSING
、CREATE ON MISSING
、NULL ON MISSING
。 -
ERROR ON MISMATCH
(デフォルト)、IGNORE ON MISMATCH
。 -
NULL ON NULL
(デフォルト)、IGNORE ON NULL
、ERROR ON NULL
-
ERROR ON EMPTY
(デフォルト)、IGNORE ON EMPTY
。