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

Wie filtert man Zeilen nach verschachtelten Werten in einer JSON-Spalte?

Ihre Abfrage ist nahe. json_each() ist die Schlüsselfunktion. Oder jsonb_each() für jsonb . Ein paar Verbesserungen:

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

Altes sqlfiddle
db<>fiddle hier

Alternative mit JSON-Array

Sie haben bereits meine verwandte Antwort für JSON-Arrays gesehen:

Während die Abfrage für verschachtelte JSON-Objekte genauso einfach erscheint, gibt es eine überlegene Indexunterstützung für das Array:

Kann mit SQL/JSON in Postgres 12 einfacher/effizienter werden ...