sql >> Base de Datos >  >> RDS >> PostgreSQL

Consulta XPath en datos jerárquicos, preservando la relación ancestro-descendiente

Prueba esto:

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;

Produce exactamente el resultado solicitado.

Primero, en la subconsulta, recupero nodos de loro completos. Un nodo por fila.

Luego, obtengo el nombre y los descriptores con xpath(). Ambos son matrices. Tomo el primer (y único) elemento de name y dividir el descriptor array con `unnest(), llegando así al resultado deseado.

Escribí una respuesta completa a una pregunta relacionada recientemente. Puede ser de su interés.