PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment filtrer les lignes sur les valeurs imbriquées dans une colonne json ?

Votre requête est proche. json_each() est la fonction clé. Ou jsonb_each() pour jsonb . Quelques améliorations :

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

Ancien sqlfiddle
db<>violon ici

Alternative avec tableau JSON

Vous avez déjà vu ma réponse connexe pour les tableaux JSON :

Bien que la requête pour les objets JSON imbriqués semble tout aussi simple, il existe une meilleure prise en charge des index pour le tableau :

Peut devenir plus simple / plus efficace avec SQL/JSON dans Postgres 12 ...