Váš dotaz je blízko. json_each()
je klíčová funkce. Nebo jsonb_each()
pro jsonb
. Pár vylepšení:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
Starý sqlfiddle
db<>fiddle zde
-
json_each()
již vrací hodnotu jakojson
datový typ. Není potřeba další obsazení. -
Ještě lepší je použít
LATERAL
odkaz vEXISTS
. To je mnohem čistší než rozkládání pomocí funkce vrácení sady vSELECT
seznam. Související: -
Použijte
ILIKE
(~~*
) pro shodu vzoru. Shoda s regulárním výrazem (~
,~*
) jsou výkonnější, ale také dražší. Použijte tedy základníLIKE
/ILKE
kde můžeš. Podrobnosti:
Alternativa s polem JSON
Už jste viděli moji související odpověď pro pole JSON:
I když se dotaz na vnořené objekty JSON zdá stejně jednoduchý, existuje vynikající podpora indexů pro pole:
Může být jednodušší / efektivnější s SQL/JSON v Postgres 12 ...