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 sebagaijsontipe data. Tidak perlu pemeran tambahan. -
Lebih baik lagi, gunakan
LATERALreferensi diEXISTS. Ini jauh lebih bersih daripada unnesting dengan fungsi set-return diSELECTdaftar. Terkait: -
Gunakan
ILIKE(~~*) untuk pencocokan pola. Persamaan ekspresi reguler (~,~*) lebih kuat, tetapi juga lebih mahal. Jadi gunakanLIKEdasar /ILKEdi 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 ...