Jag är inte säker på att du har en json[]
(PostgreSQL-array av json
värden) kolumn, eller en json
inskriven kolumn, som verkar vara en JSON-array (som i ditt exempel).
I båda fallen måste du utöka din array innan du frågar. I fallet med json[]
måste du använda unnest(anyarray)
; i fallet med JSON-matriser i en json
kolumn, måste du använda json_array_elements(json)
(och SIDA
går med -- de är implicita i mina exempel):
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;
Tyvärr kan du inte använda något index med dina data. Du måste fixa ditt schema först, för att kunna göra det.