इसे आजमाएं:
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;
बिल्कुल अनुरोधित आउटपुट उत्पन्न करता है।
सबसे पहले, सबक्वेरी में, मैं पूरे तोते-नोड्स को पुनः प्राप्त करता हूं। प्रति पंक्ति एक नोड।
इसके बाद, मुझे xpath() के साथ नाम और डिस्क्रिप्टर मिलते हैं। दोनों सरणी हैं। मैं name
. का पहला (और केवल) तत्व लेता हूं और descriptor
. को विभाजित करें सरणी `अननेस्ट () के साथ, जिससे वांछित परिणाम पर पहुंचे।
मैंने एक संबंधित प्रश्न का व्यापक उत्तर लिखा हाल ही में। आपकी रुचि हो सकती है।