PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Kueri XPath menjadi data hierarkis, mempertahankan hubungan leluhur-keturunan

Coba ini:

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;

Menghasilkan output yang diminta dengan tepat.

Pertama, di subquery, saya mengambil seluruh parrot-node. Satu simpul per baris.

Selanjutnya, saya mendapatkan nama dan deskriptor dengan xpath(). Keduanya adalah array. Saya mengambil elemen pertama (dan satu-satunya) dari name dan pisahkan descriptor array dengan `unnest(), sehingga sampai pada hasil yang diinginkan.

Saya menulis jawaban komprehensif untuk pertanyaan terkait baru-baru ini. Mungkin menarik bagi Anda.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL Upsert membedakan baris yang disisipkan dan diperbarui menggunakan kolom sistem XMIN, XMAX, dan lainnya

  2. Bagaimana cara menyimpan string yang berisi tanda kutip tunggal ke kolom teks di PostgreSQL

  3. Cara menemukan semua baris dengan nilai NULL di kolom mana pun menggunakan PostgreSQL

  4. Nama tabel dinamis kueri SQL di FOR

  5. Menyimpan ARRAY PostgreSQL dari nilai ENUM