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.