employees->'employment'->'benefits'
es una matriz json, por lo que debe anularla para usar sus elementos en any
comparación. Use la función jsonb_array_elements_text()
en unión lateral
:
select *
from
employees,
jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
where
benefit = any('{Insurance A, Insurance B}'::text[]);
La sintaxis
from
employees,
jsonb_array_elements_text(employees->'employment'->'benefits')
es equivalente a
from
employees,
lateral jsonb_array_elements_text(employees->'employment'->'benefits')
La palabra lateral
puede omitirse. Para la documentación
:
Consulte también:¿Cuál es la diferencia entre LATERAL y una subconsulta en PostgreSQL?
La sintaxis
from jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
es una forma de creación de alias, según la documentación