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