Gunakan ANY
untuk menguji apakah larik jsonb berisi apa saja dari nilai yang tepat, yang dapat berupa larik atau subkueri, menggunakan contoh sqlfiddle Anda
SELECT *
FROM tableA
WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)
Anda juga dapat melewatkan literal array, dalam hal ini akan memerlukan array nilai JSONB, yaitu sisi kanan @>
dapat diganti dengan ANY('{123,456}'::JSONB[])
literal
Atau, Gunakan &&
untuk menguji tumpang tindih array. Pertama-tama perlu untuk mengonversi larik JSON/JSONB ke larik asli
SELECT tableA.*
FROM tableA
JOIN LATERAL (
SELECT ARRAY_AGG(v::INT) y
FROM JSONB_ARRAY_ELEMENTS_TEXT(data->'sequence') v
) x ON TRUE
WHERE x.y && '{123, 456}'
Anda juga dapat mengganti array literal '{123, 456}'
dengan subkueri yang mengembalikan larik bilangan bulat, seperti (SELECT ARRAY_AGG(data_id) FROM tableB)
Pilihan lain adalah menggunakan atau di klausa where Anda
select *
from tableA
where (data->'sequence') @> '[456]'
or (data->'sequence') @> '[123]'