クエリは終了しました。 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を使用すると、よりシンプルで効率的になる可能性があります...