クエリは終了しました。 json_each()
重要な機能です。またはjsonb_each() jsonbの場合 。いくつかの改善点:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
古い
db <> fiddle こちら
-
json_each()すでに値をjsonとして返します データ・タイプ。追加のキャストは必要ありません。 -
それでもなお、
LATERALを使用することをお勧めしますEXISTSでの参照 。これは、SELECTでset-returning関数を使用してネストを解除するよりもはるかにクリーンです。 リスト。関連: -
ILIKEを使用する (~~*)パターンマッチの場合。正規表現の一致(~、~*)はより強力ですが、より高価でもあります。したがって、基本的なLIKEを使用します /ILKEどこのことができます。詳細:
JSON配列の代替
JSON配列に関する私の関連する回答はすでにご覧になっています:
ネストされたJSONオブジェクトのクエリは同じように単純に見えますが、優れたインデックスサポートがあります アレイの場合:
Postgres12のSQL/JSONを使用すると、よりシンプルで効率的になる可能性があります...