ANY
を使用する jsonb配列にanyが含まれているかどうかをテストします sqlfiddleの例を使用して、配列またはサブクエリの正しい値を選択します。
SELECT *
FROM tableA
WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)
配列リテラルを渡すこともできます。この場合、JSONB値の配列、つまり@>
の右側が必要になります。 リテラルANY('{123,456}'::JSONB[])
に置き換えることができます
または、&&
を使用します アレイのオーバーラップをテストします。まず、JSON/JSONB配列をネイティブ配列に変換する必要があります
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}'
配列リテラル'{123, 456}'
を置き換えることもできます (SELECT ARRAY_AGG(data_id) FROM tableB)
などの整数の配列を返すサブクエリを使用します。
別のオプションは、またはwhere句で使用することです
select *
from tableA
where (data->'sequence') @> '[456]'
or (data->'sequence') @> '[123]'