sql >> Databasteknik >  >> RDS >> PostgreSQL

XPath-fråga i hierarkisk data, bevarar relationen mellan anor och ättlingar

Prova detta:

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;

Ger exakt den efterfrågade utdata.

Först, i underfrågan, hämtar jag hela papegojnoder. En nod per rad.

Därefter får jag namnet och deskriptorerna med xpath(). Båda är arrayer. Jag tar det första (och enda) elementet i name och dela upp descriptor array med `unnest(), vilket kommer fram till det önskade resultatet.

Jag skrev ett uttömmande svar på en relaterad fråga nyligen. Kan vara av intresse för dig.




  1. Hur man listar tabeller i MySQL och MariaDB

  2. Högsta utseende av ett värde inom varje grupp

  3. PostgreSQL GeoJSON <- php -> JavaScript

  4. Handledning för Paypal php MySQL integration