employees->'employment'->'benefits'
è un array json, quindi dovresti annullarne l'annidamento per utilizzare i suoi elementi in any
confronto.Utilizzare la funzione jsonb_array_elements_text()
in unione laterale
:
select *
from
employees,
jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
where
benefit = any('{Insurance A, Insurance B}'::text[]);
La sintassi
from
employees,
jsonb_array_elements_text(employees->'employment'->'benefits')
è equivalente a
from
employees,
lateral jsonb_array_elements_text(employees->'employment'->'benefits')
La parola lateral
può essere omesso. Per la documentazione
:
Vedi anche:Qual è la differenza tra LATERAL e una sottoquery in PostgreSQL?
La sintassi
from jsonb_array_elements_text(employees->'employment'->'benefits') benefits(benefit)
è una forma di aliasing, secondo la documentazione