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

Hvordan filtrerer man rækker på indlejrede værdier i en json-kolonne?

Din forespørgsel er tæt på. json_each() er nøglefunktionen. Eller jsonb_each() for jsonb . Et par forbedringer:

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

Gammel sqlfiddle
db<>fiddle her

Alternativ med JSON-array

Du har allerede set mit relaterede svar for JSON-arrays:

Mens forespørgslen efter indlejrede JSON-objekter virker lige så enkel, er der overlegen indeksunderstøttelse for arrayet:

Kan blive enklere / mere effektiv med SQL/JSON i Postgres 12 ...



  1. RUC eller RUR?

  2. Vis hver række fra MySQL i en separat DIV

  3. ORA-12557 TNS:protokoladapter kan ikke indlæses

  4. MySQL FEJL 502:VÆLG * FRA tabel WHERE uid=1 ORDER BY id DESC LIMIT 0, 100; Sideinddeling virker ikke