sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo usar postgresql any con datos jsonb

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