sql >> Database >  >> RDS >> PostgreSQL

Hoe postgresql any te gebruiken met jsonb-gegevens

employees->'employment'->'benefits' is een json-array, dus je moet het uit elkaar halen om de elementen ervan te gebruiken in any vergelijking.Gebruik de functie jsonb_array_elements_text() in laterale samenvoeging :

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

De syntaxis

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

is gelijk aan

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

Het woord lateral mag worden weggelaten. Voor de documentatie :

Zie ook:Wat is het verschil tussen LATERAL en een subquery in PostgreSQL?

De syntaxis

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

is een vorm van aliasing, volgens de documentatie



  1. Hoe te repareren Bericht:SQLSTATE [08004] [1040] Te veel verbindingen

  2. Toepassing crasht bij installatie met fout sqlite3_exec - Kan synchrone modus =1 (Normaal) niet instellen

  3. JPA en 1000 ID gebruiken in Oracle IN Operator

  4. Laden van klasse `com.mysql.jdbc.Driver'. Dit wordt afgeraden. De nieuwe driverklasse is `com.mysql.cj.jdbc.Driver'