PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment utiliser postgresql any avec des données jsonb

employees->'employment'->'benefits' est un tableau json, vous devez donc le désimbriquer pour utiliser ses éléments dans any comparaison.Utilisez la fonction jsonb_array_elements_text() dans jointure latérale :

select *
from 
    employees, 
    jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
where
    benefit = any('{Insurance A, Insurance B}'::text[]);

La syntaxe

from 
    employees, 
    jsonb_array_elements_text(employees->'employment'->'benefits')

est équivalent à

from 
    employees, 
    lateral jsonb_array_elements_text(employees->'employment'->'benefits')

Le mot lateral peut être omis. Pour la documentation :

Voir aussi :Quelle est la différence entre LATERAL et une sous-requête dans PostgreSQL ?

La syntaxe

from jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)

est une forme d'aliasing, selon la documentation