PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Zapytanie XPath do danych hierarchicznych, z zachowaniem relacji przodek-potomek

Spróbuj tego:

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;

Tworzy dokładnie żądany wynik.

Najpierw w podzapytaniu pobieram całe węzły papugi. Jeden węzeł na wiersz.

Następnie otrzymuję nazwę i deskryptory za pomocą xpath(). Oba są tablicami. Biorę pierwszy (i jedyny) element name i podziel descriptor tablica z `unnest(), tym samym osiągając pożądany wynik.

Napisałem kompleksową odpowiedź na powiązane pytanie ostatnio. Może Cię zainteresować.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Debuguj SQL w pgAdmin, gdy SQL zawiera zmienne

  2. Jak używać Flask/Peewee z Heroku?

  3. Postgres DB Trigger wywołujący funkcję Java

  4. transfer danych z jednej bazy danych do innej bazy w odoo

  5. leniwe zapytanie clojure.java.jdbc