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

Cara merender hubungan satu ke banyak ke XML dengan PostgreSQL

Coba:

SELECT p.id as pack_id,
       XMLELEMENT(name taskgroup,
                  XMLATTRIBUTES(tg.id as id),
                  XMLAGG(XMLELEMENT(name task,
                         XMLATTRIBUTES(t.id as id)) as xml_task_group
FROM packages p
JOIN package_taskgroup pt ON p.id = pt.package_id
JOIN taskgroups tg on pt.taskgroup_id = tg.id
JOIN taskgroup_task tt on tg.id = tt.taskgroup_id
JOIN tasks t on tt.task_id = t.id
WHERE p.id = somePackageId 
GROUP BY p.id, tg.id

Ini akan memberi Anda semua grup tugas untuk p.id Anda tentukan.

Kemudian:

SELECT XMLELEMENT(name package, 
                  XMLATTRIBUTES(pack_id as id),
                  XMLAGG(xml_task_group))
FROM (previous SELECT here)

Ini akan memberi Anda struktur yang Anda tentukan.

Detail:XMLAGG , Fungsi XML

Bergabung pilih akan terlihat seperti ini:

SELECT XMLELEMENT(name package, 
                  XMLATTRIBUTES(pack_id as id),
                  XMLAGG(xml_task_group))
FROM (SELECT p.id as pack_id,
             XMLELEMENT(name taskgroup,
                        XMLATTRIBUTES(tg.id as id),
                        XMLAGG(XMLELEMENT(name task,
                                          XMLATTRIBUTES(t.id as id)
                       ))) as xml_task_group
      FROM packages p
      JOIN package_taskgroup pt ON p.id = pt.package_id
      JOIN taskgroups tg on pt.taskgroup_id = tg.id
      JOIN taskgroup_task tt on tg.id = tt.taskgroup_id
      JOIN tasks t on tt.task_id = t.id
      WHERE p.id = somePackageId 
      GROUP BY p.id, tg.id) t
GROUP BY pack_id

Saya cukup menyalin pilihan pertama ke FROM klausa kedua.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ekspor skrip CREATE untuk database

  2. Bekerja dengan DataSource, JNDI API di IntelliJ

  3. Kesalahan Ruby/PgSQL pada Rails start:tidak dapat memuat file seperti itu - pg_ext (LoadError)

  4. Apa cara yang paling direkomendasikan untuk menyimpan waktu di PostgreSQL menggunakan Java?

  5. Ukuran maksimum tipe data TEXT di postgresql