Użyj ANY
aby sprawdzić, czy tablica jsonb zawiera any właściwych wartości, które mogą być tablicą lub podzapytaniem, przy użyciu przykładu sqlfiddle
SELECT *
FROM tableA
WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)
Możesz także przekazać literał tablicy, w tym przypadku wymagałoby to tablicy wartości JSONB, czyli prawej strony @>
można zastąpić literałem ANY('{123,456}'::JSONB[])
Alternatywnie użyj &&
aby przetestować nakładanie się tablic. Najpierw należy przekonwertować tablicę JSON/JSONB na tablicę natywną
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}'
Możesz również zastąpić literał tablicy '{123, 456}'
z podzapytaniem, które zwraca tablicę liczb całkowitych, np. (SELECT ARRAY_AGG(data_id) FROM tableB)
Inną opcją byłoby użycie lub w klauzuli where
select *
from tableA
where (data->'sequence') @> '[456]'
or (data->'sequence') @> '[123]'