PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL 9.4:Agregat / Gabung tabel pada id bidang JSON di dalam array

Ide dasarnya adalah bahwa kueri Anda harus mengharapkan json Anda terstruktur dengan cara tertentu, jika tidak maka akan menjadi sangat kompleks. Berdasarkan struktur yang diharapkan, kami dapat membedah struktur json menjadi kolom menggunakan json_to_recordset dan untuk membangunnya kembali dengan informasi tambahan menggunakan json_build_object dan 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

Ini berfungsi tetapi sangat terbatas dalam hal fleksibilitas:Saya harus secara eksplisit mencantumkan setiap bidang tab dan properti Anda dan saya berharap dokumen memiliki struktur tertentu. Tapi ini awal yang baik :)




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara memfilter hasil kueri di PostgreSQL

  2. Cara mengelompokkan/memilih kolom tipe JSON (PG::UndefinedFunction:ERROR:tidak dapat mengidentifikasi operator kesetaraan untuk tipe json)

  3. MASUKKAN baris ke dalam beberapa tabel dalam satu kueri, pilih dari tabel yang terlibat

  4. Hitung Kunci Utama berikutnya - dengan format tertentu

  5. Membandingkan Opsi Cloud Database untuk PostgreSQL