sql >> Databáze >  >> RDS >> PostgreSQL

XPath dotaz na hierarchická data, zachování vztahu předek–potomek

Zkuste toto:

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;

Vytváří přesně požadovaný výstup.

Nejprve v poddotazu získám celé uzly papoušků. Jeden uzel na řádek.

Dále získám název a deskriptory pomocí xpath(). Oba jsou pole. Beru první (a jediný) prvek name a rozdělte descriptor pole pomocí `unnest(), čímž se dosáhne požadovaného výsledku.

Napsal jsem komplexní odpověď na související otázku nedávno. Může vás to zajímat.




  1. PHP - oci_connect nenalezeno

  2. Serverless Framework s Node MySQL

  3. Existuje nějaký způsob, jak se vrátit zpět po odevzdání v MySQL?

  4. Jak mohu synchronizovat dvě databáze Oracle?