PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come usare postgresql any con i dati jsonb

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