employees->'employment'->'benefits'
é um array json, então você deve desaninhar para usar seus elementos em any
comparação. Use a função jsonb_array_elements_text()
em junção lateral
:select *
from
employees,
jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
where
benefit = any('{Insurance A, Insurance B}'::text[]);
A sintaxe
from
employees,
jsonb_array_elements_text(employees->'employment'->'benefits')
é equivalente a
from
employees,
lateral jsonb_array_elements_text(employees->'employment'->'benefits')
A palavra
lateral
pode ser omitido. Para a documentação
:Veja também:Qual é a diferença entre LATERAL e uma subconsulta no PostgreSQL?
A sintaxe
from jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
é uma forma de alias, de acordo com a documentação