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

Cách kết xuất một đến nhiều mối quan hệ sang XML với PostgreSQL

Hãy thử:

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

Điều này sẽ cung cấp cho bạn tất cả các nhóm nhiệm vụ cho p.id bạn đã chỉ định.

Sau đó:

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

Điều này sẽ cung cấp cho bạn cấu trúc bạn đã chỉ định.

Chi tiết: XMLAGG , Các hàm XML

Lựa chọn đã tham gia sẽ trông như thế này:

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

Tôi chỉ cần sao chép lựa chọn đầu tiên vào FROM mệnh đề thứ hai.



  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 thế nào để cài đặt libpq-fe.h?

  2. Cách lưu trữ và truy vấn cơ sở dữ liệu với cấu trúc cây

  3. Cách bảo mật cơ sở dữ liệu PostgreSQL của bạn - 10 mẹo

  4. Tổng chênh lệch thời gian giữa các hàng

  5. Cách xóa nhiều hàng khỏi bảng được truy cập thường xuyên