PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách lấy các phần tử từ mảng Json trong PostgreSQL

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;

SQLFiddle

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 đó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để đính kèm cơ sở dữ liệu vào một ứng dụng trong Heroku?

  2. Làm thế nào để xóa triệt để và cài đặt lại postgresql trên ubuntu?

  3. lỗi khi cài đặt psycopg2, không tìm thấy thư viện cho -lssl

  4. Không tìm thấy trình điều khiển phù hợp khi bao gồm các trình điều khiển cần thiết với maven-assembly-plugin

  5. Sử dụng nhiều cơ sở dữ liệu và lược đồ POSTGRES với cùng một mô hình Flask-SQLAlchemy