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

PostgreSQL 9.4:Bảng tổng hợp / Tham gia trên id trường JSON bên trong mảng

Ý tưởng cơ bản là truy vấn của bạn nên mong đợi json của bạn được cấu trúc theo một cách nhất định, nếu không nó sẽ thực sự phức tạp. và để xây dựng lại nó với thông tin bổ sung bằng cách sử dụng json_build_object json_agg .

WITH tab_properties_with_expanded_data_type AS (
    SELECT
      content_type.id AS content_type_id,
      tab.name AS tab_name,
      json_agg(
          -- re-build the property object, but with additional data_type information
          json_build_object(
              'name', property.name,
              'order', property.order,
              'help_text', property.help_text,
              'description', property.description,
              'data_type', json_build_object('id', data_type.id, 'html', data_type.html)
          )
      ) AS tab_properties
    FROM content_type,
      json_to_recordset(content_type.tabs) AS tab(name TEXT, properties JSON),
      json_to_recordset(tab.properties) AS property(name TEXT, "order" INTEGER, help_text TEXT, description TEXT, data_type INTEGER)
      LEFT JOIN data_type ON data_type.id = property.data_type
    GROUP BY 
      content_type.id, 
      tab.name
)
SELECT
  tab_properties_with_expanded_data_type.content_type_id AS id, 
  json_agg(
      -- rebuild the tab object
      json_build_object(
          'name', tab_properties_with_expanded_data_type.tab_name,
          'properties', tab_properties_with_expanded_data_type.tab_properties
      )
  )
FROM tab_properties_with_expanded_data_type
GROUP BY 
  tab_properties_with_expanded_data_type.content_type_id

Điều này hoạt động nhưng rất hạn chế về tính linh hoạt:Tôi phải liệt kê rõ ràng mọi trường tab và thuộc tính của bạn và tôi mong rằng tài liệu sẽ có một cấu trúc cụ thể. Nhưng đó là một khởi đầu tốt :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Django SearchVector sử dụng icontains

  2. làm thế nào để loại bỏ tất cả các cơ sở dữ liệu ngoại trừ một số cơ sở dữ liệu trong postgres

  3. psql:không thể kết nối với máy chủ:Kết nối bị từ chối Lỗi khi kết nối với cơ sở dữ liệu từ xa

  4. Phân số TX và XID đại diện cho điều gì trong công cụ postgres pgadmin

  5. Chèn nhiều hàng trong một bảng dựa trên số trong bảng khác