PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

So verwenden Sie postgresql any mit jsonb-Daten

employees->'employment'->'benefits' ist ein json-Array, also sollten Sie es entschachteln, um seine Elemente in any zu verwenden Vergleich. Verwenden Sie die Funktion jsonb_array_elements_text() in lateral join :

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

Die Syntax

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

entspricht

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

Das Wort lateral kann weggelassen werden. Für die Dokumentation :

Siehe auch:Was ist der Unterschied zwischen LATERAL und einer Unterabfrage in PostgreSQL?

Die Syntax

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

ist eine Form von Aliasing gemäß der Dokumentation