MySQLでは、JSON_MERGE_PATCH() functionは、重複するキーを持つメンバーを保持することなく、2つ以上のJSONドキュメントのRFC7396準拠のマージを実行します。
JSONドキュメントを引数として提供します。
構文
構文は次のようになります:
JSON_MERGE_PATCH(json_doc, json_doc[, json_doc] ...)
json_docの場所 マージされるJSONドキュメントです。いずれかのドキュメントが無効な場合、エラーが発生します。
例1-基本的な使用法
実例を示します。
SELECT JSON_MERGE_PATCH('{"Name": "Homer"}', '{"Age": 39}') Result;
結果:
+------------------------------+
| Result |
+------------------------------+
| {"Age": 39, "Name": "Homer"} |
+------------------------------+
したがって、この例では、2つの別々のオブジェクトを1つのオブジェクトにマージしました。
例2–キーの重複
前述のように、この関数は重複するキーを持つメンバーを保持しません。例:
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
結果:
+------------------+
| Result |
+------------------+
| {"Name": "Bart"} |
+------------------+
したがって、この場合、バートが勝ちました。
重複するキーを持つメンバーを保持する必要がある場合は、JSON_MERGE_PRESERVE()を使用してください 代わりに機能します。この例でその関数を使用すると、Nameになります。 両方のBartholomewを含む配列に およびBart 。このように:
SELECT
JSON_MERGE_PRESERVE('{"Name": "Bartholomew"}', '{"Name": "Bart"}') Result;
結果:
+-----------------------------------+
| Result |
+-----------------------------------+
| {"Name": ["Bartholomew", "Bart"]} |
+-----------------------------------+
例3–複数のメンバー
別の例を示しますが、オブジェクトに追加のメンバーがあります:
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew", "Age": 10}', '{"Name": "Bart"}') Result;
結果:
+-----------------------------+
| Result |
+-----------------------------+
| {"Age": 10, "Name": "Bart"} |
+-----------------------------+
> それで、バートはまだ勝ちます、そして、彼は最初のオブジェクトの他のメンバーと合併されました。
もちろん、これは逆の方法でも機能します。2番目のオブジェクトに追加のメンバーを追加しても、結果は同じです。
SELECT
JSON_MERGE_PATCH('{"Name": "Bartholomew"}', '{"Name": "Bart", "Age": 10}') Result;
結果:
+-----------------------------+
| Result |
+-----------------------------+
| {"Age": 10, "Name": "Bart"} |
+-----------------------------+
> 例4–その他のドキュメント
2つのドキュメントのみをマージすることに限定されません。必要な数だけマージできます。これは、3つのオブジェクトをマージする例です。
SELECT
JSON_MERGE_PATCH('{"Name": "Bart"}', '{"Age": 10}', '{"Hair Color": "Yellow"}') Result;
結果:
+-----------------------------------------------------+
| Result |
+-----------------------------------------------------+
| {"Age": 10, "Name": "Bart", "Hair Color": "Yellow"} |
+-----------------------------------------------------+
例5–アレイ
同じ名前の2つの配列をマージすると、そのうちの1つだけが保持されます:
SELECT
JSON_MERGE_PATCH('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
結果:
+--------------------------------+
| Result |
+--------------------------------+
| {"Hobbies": ["Skateboarding"]} |
+--------------------------------+
ここでも、JSON_MERGE_PRESERVE()を使用できます 両方のアレイを保持する必要がある場合。したがって、前の例は次のように書き直すことができます。
SELECT
JSON_MERGE_PRESERVE('{"Hobbies": ["Trouble", "Mischief"]}', '{"Hobbies": ["Skateboarding"]}') Result;
結果:
+-------------------------------------------------------+
| Result |
+-------------------------------------------------------+
| {"Hobbies": ["Trouble", "Mischief", "Skateboarding"]} |
+-------------------------------------------------------+
例6–より大きなJSONドキュメント
これは、(少し)大きなJSONドキュメントをマージする例です。
SET @data1 = '{
"Suspect": {
"Name": "Bart",
"Hobbies": ["Skateboarding", "Mischief"]
}
}',
@data2 = '{
"Suspect": {
"Age": 10,
"Parents": ["Marge", "Homer"]
}
}';
SELECT JSON_MERGE_PATCH(@data1, @data2) Result;
結果:
+-------------------------------------------------------------------------------------------------------------------+
| Result |
+-------------------------------------------------------------------------------------------------------------------+
| {"Suspect": {"Age": 10, "Name": "Bart", "Hobbies": ["Skateboarding", "Mischief"], "Parents": ["Marge", "Homer"]}} |
+-------------------------------------------------------------------------------------------------------------------+
この関数がマージを実行する方法の正確なルールについては、MySQLのドキュメントを参照してください。