sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur filtrerar man rader på kapslade värden i en json-kolumn?

Din fråga är nära. json_each() är nyckelfunktionen. Eller jsonb_each() för jsonb . Ett par förbättringar:

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

Gammal sqlfiddle
db<>fiol här

Alternativ med JSON-array

Du har redan sett mitt relaterade svar för JSON-arrayer:

Även om frågan för kapslade JSON-objekt verkar lika enkel, finns det överlägset indexstöd för arrayen:

Kan bli enklare / effektivare med SQL/JSON i Postgres 12 ...



  1. Tungt utbyte på Oracle 12.1.0.2

  2. Utökade evenemang för SSAS

  3. SQL Server - aktuellt användarnamn

  4. välja på varandra följande nummer med SQL-fråga