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

MariaDB JSON_REMOVE()の説明

    MariaDBでは、JSON_REMOVE() JSONドキュメントからデータを削除して結果を返す組み込み関数です。

    構文

    構文は次のようになります:

    JSON_REMOVE(json_doc, path[, path] ...)

    実例を示します。

    SET @json = '{ "name" : "Wag", "type" : "Dog" }';
    
    SELECT JSON_REMOVE(@json, '$.type');

    結果:

    +------------------------------+
    | JSON_REMOVE(@json, '$.type') |
    +------------------------------+
    | {"name": "Wag"}              |
    +------------------------------+

    この場合、データメンバーのtypeを削除しました ドキュメントから。つまり、type キーとそれに関連する値が削除されました。

    配列

    JSON_REMOVE() 配列全体、または配列内の特定の要素を削除するために使用できます。

    配列全体を削除するには、キー名を使用するだけです:

    SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';
    
    SELECT JSON_REMOVE(@json, '$.scores');

    結果:

    +--------------------------------+
    | JSON_REMOVE(@json, '$.scores') |
    +--------------------------------+
    | {"name": "Wag"}                |
    +--------------------------------+

    これにより、配列全体がドキュメントから削除されました。

    配列要素を削除するには、要素のインデックスを指定します。配列から配列要素を削除する例を次に示します。

    SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';
    
    SELECT JSON_REMOVE(@json, '$.scores[1]');

    結果:

    +-----------------------------------+
    | JSON_REMOVE(@json, '$.scores[1]') |
    +-----------------------------------+
    | {"name": "Wag", "scores": [8, 9]} |
    +-----------------------------------+

    この場合、2番目の配列要素が削除されました。配列はゼロベースであるため、$.scores[1] 配列の2番目の要素を参照します。

    JSON_REMOVE()の方法については、以下を参照してください アレイ内の複数のパスの削除を扱います。

    複数のパス

    複数のパスを提供する場合、それらは左から右に評価されます。これは、前の評価の結果が次の値として使用されることを意味します。

    インデックスに基づいて配列から要素を削除するときは、これに特に注意する必要があります。

    まず、キーに基づいてドキュメントから複数のパスを削除する例を次に示します。

    SET @json = '
        { 
            "name" : "Wag", 
            "type" : "Dog",
            "weight" : 10
        }
    ';
    
    SELECT JSON_REMOVE(@json, '$.type', '$.weight');

    結果:

    +------------------------------------------+
    | JSON_REMOVE(@json, '$.type', '$.weight') |
    +------------------------------------------+
    | {"name": "Wag"}                          |
    +------------------------------------------+

    各キー/値のペアは期待どおりに削除されました。

    次の例では、キーと値のペアを削除しません。代わりに、配列から複数の要素を削除します:

    SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
    
    SELECT 
        JSON_REMOVE(@json, '$.scores[2]', '$.scores[4]') AS a,
        JSON_REMOVE(@json, '$.scores[4]', '$.scores[2]') AS b;

    結果:

    +--------------------------+--------------------------+
    | a                        | b                        |
    +--------------------------+--------------------------+
    | {"scores": [0, 1, 3, 4]} | {"scores": [0, 1, 3, 5]} |
    +--------------------------+--------------------------+

    この場合、JSON_REMOVE()を呼び出しました 2回。どちらも削除する同じ配列インデックスを指定しています(2 および4 )が、2番目の呼び出しで引数を入れ替えます。最初の例では、2になります 次に4 (この順序で)。 2番目の例では、4 次に2

    これにより、呼び出しごとに異なる結果が生成されました。前述のように、複数のパスは左から右に評価されるため、順序が結果に影響を与える可能性があります。

    これは、指定されたパスの数、パス、および順序に応じて、結果がどのように大きく異なるかを示す別の例です。

    SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';
    
    SELECT 
        JSON_REMOVE(@json, '$.scores[0]', '$.scores[1]', '$.scores[5]') AS a,
        JSON_REMOVE(@json, '$.scores[1]', '$.scores[5]', '$.scores[0]') AS b,
        JSON_REMOVE(@json, '$.scores[5]', '$.scores[0]', '$.scores[1]') AS c,
        JSON_REMOVE(@json, '$.scores[5]', '$.scores[1]', '$.scores[0]') AS d,
        JSON_REMOVE(@json, '$.scores[1]', '$.scores[0]', '$.scores[5]') AS e,
        JSON_REMOVE(@json, '$.scores[0]', '$.scores[5]', '$.scores[1]') AS f;

    結果(垂直出力を使用):

    a: {"scores": [1, 3, 4, 5]}
    b: {"scores": [2, 3, 4, 5]}
    c: {"scores": [1, 3, 4]}
    d: {"scores": [2, 3, 4]}
    e: {"scores": [2, 3, 4, 5]}
    f: {"scores": [1, 3, 4, 5]}

    ヌル引数

    引数がNULLの場合 、結果はNULLです :

    SELECT 
        JSON_REMOVE(null, '$.a') AS a,
        JSON_REMOVE('{"a":1}', null) AS b,
        JSON_REMOVE(null, null) AS c;

    結果:

    +------+------+------+
    | a    | b    | c    |
    +------+------+------+
    | NULL | NULL | NULL |
    +------+------+------+

    パラメータカウントが正しくありません

    JSON_REMOVE()を呼び出す 引数がないとエラーになります:

    SELECT JSON_REMOVE();

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'

    十分な引数が渡されない場合も同じです:

    SELECT JSON_REMOVE('{"a":1}');

    結果:

    ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'

    1. PostgreSQLは再帰CTEから関数にデータを渡します

    2. mysql_queryが結果を返したかどうかを確認する最良の方法は?

    3. カンマリストでのMySQL検索

    4. SQL Serverにリンクサーバーログインを追加する(T-SQLの例)