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をマージしたものです(つまり、入力配列ab)。入力配列bにあるフィールドzは、結果では、配列aに追加されています。配列bにあるフィールドyは、結果の配列aで使用されています。つまり、配列byの値が、配列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 MISSINGCREATE ON MISSINGNULL ON MISSING

  • ERROR ON MISMATCH (デフォルト)、IGNORE ON MISMATCH

  • NULL ON NULL (デフォルト)、IGNORE ON NULLERROR ON NULL

  • ERROR ON EMPTY (デフォルト)、IGNORE ON EMPTY