sql >> データベース >  >> RDS >> Mysql

JSON_MERGE_PATCH()–MySQLでRFC7396準拠のJSONドキュメントのマージを実行します

    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のドキュメントを参照してください。


    1. MySQLのROW_NUMBER()

    2. ジャンプしてテスト駆動データベース開発(TDDD)を開始

    3. SQL Serverネットワークインターフェイス:接続文字列が無効です[87]

    4. PythonがSSHトンネリングを介してMySQLに接続できるようにする