Tôi không chắc bạn có json[]
(Mảng PostgreSQL của json
giá trị) cột đã nhập hoặc một json
cột đã nhập, dường như là một mảng JSON (như trong ví dụ của bạn).
Trong mọi trường hợp, bạn cần mở rộng mảng của mình trước khi truy vấn. Trong trường hợp của json[]
, bạn cần sử dụng unnest(anyarray)
; trong trường hợp mảng JSON trong json
cột đã nhập, bạn cần sử dụng json_array_elements(json)
(và LATERAL
tham gia - chúng được ngầm hiểu trong các ví dụ của tôi):
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;
Thật không may, bạn không thể sử dụng bất kỳ chỉ mục nào với dữ liệu của mình. Trước tiên, bạn cần sửa giản đồ của mình để thực hiện điều đó.