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

PostgreSQLは2つのjsonbオブジェクトを比較します

    更新

    CREATE OR REPLACE FUNCTION jsonb_diff_val(val1 JSONB,val2 JSONB)
    RETURNS JSONB AS $$
    DECLARE
      result JSONB;
      v RECORD;
    BEGIN
       result = val1;
       FOR v IN SELECT * FROM jsonb_each(val2) LOOP
         IF result @> jsonb_build_object(v.key,v.value)
            THEN result = result - v.key;
         ELSIF result ? v.key THEN CONTINUE;
         ELSE
            result = result || jsonb_build_object(v.key,'null');
         END IF;
       END LOOP;
       RETURN result;
    END;
    $$ LANGUAGE plpgsql;
    

    クエリ:

    SELECT jsonb_diff_val(
        '{"a":"aaa", "b":"bbb", "c":"ccc"}'::jsonb,
        '{"a":"aaa", "b":"jjj", "d":"ddd"}'::jsonb
    );
                jsonb_diff_val             
    ---------------------------------------
     {"b": "bbb", "c": "ccc", "d": "null"}
    (1 row)
    


    1. テーブル内のすべての行を更新する効率的な方法

    2. クエリ内のクエリ:より良い方法はありますか?

    3. 配列をループしてデータベースに挿入する方法

    4. このクエリが単一の行のみを選択するのはなぜですか?