Permintaan Anda sudah dekat. json_each()
adalah fungsi kunci. Atau jsonb_each()
untuk jsonb
. Beberapa peningkatan:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
sqlfiddle
lama
db<>fiddle di sini
-
json_each()
sudah mengembalikan nilai sebagaijson
tipe data. Tidak perlu pemeran tambahan. -
Lebih baik lagi, gunakan
LATERAL
referensi diEXISTS
. Ini jauh lebih bersih daripada unnesting dengan fungsi set-return diSELECT
daftar. Terkait: -
Gunakan
ILIKE
(~~*
) untuk pencocokan pola. Persamaan ekspresi reguler (~
,~*
) lebih kuat, tetapi juga lebih mahal. Jadi gunakanLIKE
dasar /ILKE
di mana Anda bisa. Detail:
Alternatif dengan array JSON
Anda telah melihat jawaban terkait saya untuk array JSON:
Sementara kueri untuk objek JSON bersarang tampaknya sama sederhananya, ada dukungan indeks . yang unggul untuk larik:
Mungkin menjadi lebih sederhana/lebih efisien dengan SQL/JSON di Postgres 12 ...