Saya tidak yakin Anda memiliki json[]
(Array PostgreSQL dari json
nilai) kolom yang diketik, atau json
kolom yang diketik, yang tampaknya merupakan larik JSON (seperti dalam contoh Anda).
Apa pun kasusnya, Anda perlu memperluas array Anda sebelum melakukan kueri. Dalam kasus json[]
, Anda perlu menggunakan unnest(anyarray)
; dalam kasus array JSON dalam json
kolom yang diketik, Anda perlu menggunakan json_array_elements(json)
(dan LATERAL
bergabung -- mereka tersirat dalam contoh saya):
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;
Sayangnya, Anda tidak dapat menggunakan indeks apa pun dengan data Anda. Anda harus memperbaiki skema Anda terlebih dahulu, untuk melakukannya.