PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como usar postgresql any com dados jsonb


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