PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

XPath прави заявки в йерархични данни, като запазва връзката предшественик-потомък

Опитайте това:

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;

Произвежда точно искания резултат.

Първо, в подзаявката извличам цели папагалски възли. Един възел на ред.

След това получавам името и дескрипторите с xpath(). И двете са масиви. Вземам първия (и единствен) елемент от name и разделете descriptor масив с `unnest(), като по този начин се достига до желания резултат.

Написах изчерпателен отговор на свързан въпрос наскоро. Може да представлява интерес за вас.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да се посочи, че дадена колона не е nullable при създаване на материализиран изглед?

  2. Не може да се свърже с PostgreSQL база данни на Heroku с помощта на Ruby - не може да се преведе името на хоста

  3. Подреждане на релсите по поле за асоцииране

  4. postgresql nextval генерира съществуващи стойности

  5. Премахнете уникалността на индекса в PostgreSQL