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

Truy vấn XPath thành dữ liệu phân cấp, duy trì mối quan hệ tổ tiên - con cháu

Hãy thử điều này:

SELECT (xpath('./@name', parrot.node))[1] AS name
     , unnest(xpath('./descriptor/text()', parrot.node)) AS descriptor
FROM  (             
   SELECT unnest(xpath('./parrot', parrot_xml.document)) AS node
   FROM   parrot_xml
   ) parrot;

Tạo ra chính xác đầu ra được yêu cầu.

Đầu tiên, trong truy vấn con, tôi lấy toàn bộ các nút con vẹt. Một nút trên mỗi hàng.

Tiếp theo, tôi lấy tên và các bộ mô tả với xpath (). Cả hai đều là mảng. Tôi lấy phần tử đầu tiên (và duy nhất) của name và tách descriptor mảng với `unnest (), do đó đạt được kết quả mong muốn.

Tôi đã viết một câu trả lời toàn diện cho câu hỏi có liên quan gần đây. Có thể bạn quan tâm.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Loại bỏ cột trùng lặp sau truy vấn SQL

  2. Các cột Cơ sở dữ liệu Trong Chọn hoặc tạo các câu lệnh

  3. Perl + PostgreSQL-- Cột chọn lọc để chuyển đổi hàng

  4. Sử dụng Docker, điều đã kích hoạt PANIC:không thể định vị bản ghi điểm kiểm tra hợp lệ

  5. trong postgresql, các phân vùng hay nhiều cơ sở dữ liệu có hiệu quả hơn không?