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

Come filtrare le righe su valori nidificati in una colonna json?

La tua richiesta è vicina. json_each() è la funzione chiave. Oppure jsonb_each() per jsonb . Un paio di miglioramenti:

SELECT *
FROM   things t
WHERE  EXISTS (
   SELECT FROM json_each(t.blueprint) b
   WHERE  b.value->>'name' ILIKE 'azamund'
   );

Vecchio sqlfiddle
db<>violino qui

Alternativa con array JSON

Hai già visto la mia risposta correlata per gli array JSON:

Anche se la query per gli oggetti JSON nidificati sembra altrettanto semplice, esiste un supporto per gli indici superiore per l'array:

Può diventare più semplice/più efficiente con SQL/JSON in Postgres 12 ...