sql >> Database teknologi >  >> RDS >> PostgreSQL

XPath-forespørgsel i hierarkiske data, bevarer forfader-efterkommer-forhold

Prøv dette:

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;

Producerer præcis det ønskede output.

Først, i underforespørgslen, henter jeg hele papegøje-noder. Én node pr. række.

Dernæst får jeg navnet og deskriptorerne med xpath(). Begge er arrays. Jeg tager det første (og eneste) element i name og opdel descriptor array med `unnest(), og derved kommer frem til det ønskede resultat.

Jeg skrev et omfattende svar på et relateret spørgsmål for nylig. Kan være interessant for dig.




  1. Sådan opdaterer du udvalgte kasser med php mysql jquery ajax

  2. Send lejer-id via sql-serverforbindelse

  3. Laravel Delete Query Builder

  4. beregne alder i år måneder og dage