sql >> Databáze >  >> RDS >> PostgreSQL

Jak získat prvky z pole Json v PostgreSQL

Nejsem si jistý, zda máte json[] (PostgreSQL pole json hodnoty) zadaný sloupec nebo json zadaný sloupec, který vypadá jako pole JSON (jako ve vašem příkladu).

V obou případech musíte před dotazem rozbalit pole. V případě json[] , musíte použít unnest(anyarray) ; v případě polí JSON v json zadaný sloupec, musíte použít json_array_elements(json) (a LATERAL spojení -- jsou implicitní v mých příkladech):

select     t.id,
           each_section ->> 'name' section_name,
           each_attribute ->> 'attrkey3' attrkey3
from       t
cross join unnest(array_of_json) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where      (each_attribute -> 'attrkey3') is not null; 
-- use "where each_attribute ? 'attrkey3'" in case of jsonb


select     t.id,
           each_section ->> 'name' section_name,
           each_attribute ->> 'attrkey3' attrkey3
from       t
cross join json_array_elements(json_array) each_section
cross join json_array_elements(each_section -> 'attributes') each_attribute
where      (each_attribute -> 'attrkey3') is not null;

SQLFiddle

Bohužel se svými daty nemůžete použít žádný index. Chcete-li to provést, musíte nejprve opravit své schéma.



  1. Zjistěte, na jakém operačním systému běží SQL Server (příklad T-SQL)

  2. implementovat dotaz LIKE v PDO

  3. PHP a MySQL - Zkontrolujte, zda je uživatelské jméno již obsazeno

  4. Jak vrátit staré plsql?