Usa ANY
para probar si la matriz jsonb contiene any de los valores correctos, que pueden ser una matriz o una subconsulta, usando su ejemplo de sqlfiddle
SELECT *
FROM tableA
WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)
También puede pasar un literal de matriz, en este caso requeriría una matriz de valores JSONB, es decir, el lado derecho de @>
podría reemplazarse con el literal ANY('{123,456}'::JSONB[])
Alternativamente, use el &&
para probar la superposición de matrices. Primero es necesario convertir la matriz JSON/JSONB en una matriz nativa
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}'
También puede reemplazar el literal de matriz '{123, 456}'
con una subconsulta que devuelve una matriz de enteros, como (SELECT ARRAY_AGG(data_id) FROM tableB)
Otra opción sería usar o en su cláusula where
select *
from tableA
where (data->'sequence') @> '[456]'
or (data->'sequence') @> '[123]'