0
テーブルスキーマ:のPostgresSQL JSONB - 空の文字列のキーと一致する方法
create table test_table
(
id serial not null,
data jsonb
);
サンプルデータ:
INSERT INTO public.test_table (id, data) VALUES (1, '[{"": "VALUE1", "KEY2": "VALUE2"}, {"KEY1": "VALUE3", "KEY3": "VALUE4"}]');
INSERT INTO public.test_table (id, data) VALUES (2, '[{"''KEY1 ''": "VALUE1", "KEY2": "VALUE2"}, {"KEY3": "VALUE3", "KEY4": "VALUE4"}]');
SQLクエリ:
SELECT id, arr_elem
FROM test_table AS tt, jsonb_array_elements(
(
SELECT data
FROM test_table
WHERE id = tt.id
)
) AS arr_elem
WHERE arr_elem#>'{KEY1}' IS NOT NULL
私は、上記のクエリのチューニング次のシナリオに一致するようにしたいと思います:例:
- は、空の文字列とキーを検索例:
"": "VALUE1"
- はちょうど単一引用符で鍵を探す
"''": "VALUE1"
- は、鍵を探します例:単一引用符で囲まれた末尾のスペースで
"'KEY1 '": "VALUE1"
は、引用符やスペースを脱出しようとしたクエリが期待される結果が返されませんでした。
UPDATE 1:
1のためのソリューション:http://sqlfiddle.com/#!17/6d431/20
SELECT id, arr_elem
FROM test_table AS tt, jsonb_array_elements(
(
SELECT data
FROM test_table
WHERE id = tt.id
)
) AS arr_elem
WHERE arr_elem->'' IS NOT NULL
残念ながら、指定されたコマンドは動作しません。 http://sqlfiddle.com/#!17/6d431/16 –
私はそれが配列であることに気づきませんでした。私はそれに "不必要"を追加する必要があります。基本は動作しますが、配列ではなく、ベースオブジェクト用です。 –