説明
この関数は、RFC 7396規格に基づき、2つ以上のJSONドキュメントをマージし、重複するキーを持つメンバーを保持しない結果を返します。パラメータのいずれかに渡されたドキュメントが無効な場合、エラーが発生します。
構文
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
説明
json_doc パラメータは、マージするJSONドキュメントを指定します。
JSON_MERGEPatch() のマージルールは以下のとおりです:
最初のパラメータがオブジェクトでない場合、空オブジェクトとして2番目のパラメータとマージし、その結果を返します。
2番目のパラメータがオブジェクトでない場合、マージ結果は2番目のパラメータとなります。
2つのパラメータがオブジェクトの場合、マージ結果は以下のメンバーを持つオブジェクトとなります:
最初のオブジェクトのすべてのメンバーが、2番目のオブジェクトに同じキーを持つ対応するメンバーを持たない場合。
2番目のオブジェクトのすべてのメンバーが、最初のオブジェクトに対応するキーがなく、その値がJSONのnullリテラルではない場合。
すべてのメンバーのキーが最初のオブジェクトと2番目のオブジェクトの両方に存在し、かつ2番目のオブジェクトの値がJSONのnullリテラルではない場合。これらのメンバーの値は、最初のオブジェクトの値と2番目のオブジェクトの値を再帰的にマージした結果となります。
例
obclient> SELECT JSON_MERGE_PATCH('[1, 2, 3]', '[true, false]');
+------------------------------------------------+
| JSON_MERGE_PATCH('[1, 2, 3]', '[true, false]') |
+------------------------------------------------+
| [true, false] |
+------------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{"name": "x"}', '{"id": 23}');
+-------------------------------------------------+
| JSON_MERGE_PATCH('{"name": "x"}', '{"id": 23}') |
+-------------------------------------------------+
| {"id": 23, "name": "x"} |
+-------------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('1', 'true');
+-------------------------------+
| JSON_MERGE_PATCH('1', 'true') |
+-------------------------------+
| true |
+-------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('[1, 2, 3]', '{"id": 45}');
+---------------------------------------------+
| JSON_MERGE_PATCH('[1, 2, 3]', '{"id": 45}') |
+---------------------------------------------+
| {"id": 45} |
+---------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }');
+-----------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }') |
+-----------------------------------------------------------+
| {"a": 3, "b": 2, "c": 4} |
+-----------------------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }',NULL);
+--------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }',NULL) |
+--------------------------------------------+
| NULL |
+--------------------------------------------+
1 row in set
obclient> SELECT JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }');
+--------------------------------------------------------------------------------+
| JSON_MERGE_PATCH('{ "a": 1, "b":2 }','{ "a": 3, "c":4 }', '{ "a": 5, "d":6 }') |
+--------------------------------------------------------------------------------+
| {"a": 5, "b": 2, "c": 4, "d": 6} |
+--------------------------------------------------------------------------------+
1 row in set