Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hirarki penuh Oracle SQL diberikan simpul apa pun sebagai input

Jika Anda ingin menggunakannya sebagai tampilan, Anda dapat melakukan sesuatu sebagai berikut:

WITH rek AS (SELECT item.id
                  , item.name
                  , connect_by_root item.id root_id
               FROM item
              START WITH parent_id IS null
            CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
     , startItem.name startName
     , childItem.id childID
     , childItem.name childName
  FROM rek startItem
  JOIN rek childItem
  USING (root_id)
-- WHERE startItem.id = 3 -- This would be done from outside the view

Subkueri rek menghubungkan semua saudara pohon dengan elemen root. Maka Anda hanya perlu menggunakan query ini dua kali dan menghubungkannya melalui elemen root untuk mendapatkan semua elemen yang terhubung melalui relasi parent-child.

Jika Anda ingin mengurangi hasil, Anda dapat menggunakan SYS_CONNECT_BY_PATH untuk melakukannya:

WITH rek AS (SELECT item.id
                  , item.name
                  , connect_by_root item.id root_id
                  , SYS_CONNECT_BY_PATH(item.id, '/') path
               FROM item
              START WITH parent_id IS null
            CONNECT BY NOCYCLE parent_id = PRIOR id)
SELECT startItem.id startId
     , startItem.name startName
     , childItem.id childID
     , childItem.name childName
     , childItem.path 
  FROM rek startItem
  JOIN rek childItem
    ON startItem.root_id = childItem.root_id
    AND (startItem.path LIKE childItem.path||'/%'
      OR childItem.path LIKE startItem.path||'/%'
      OR childItem.id = startItem.id)

Ini misalnya akan memberi Anda hanya anak-anak dan orang tua dari Anda titik awal dan tidak ada entri dari daun lain.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Entity Framework terhubung ke Oracle:ODP untuk .NET tidak mendukung waktu

  2. Oracle SQL - Pivot baris tabel ke kolom dan gunakan sub kueri di pivot

  3. TNS:pendengar saat ini tidak mengetahui layanan yang diminta di deskriptor koneksi

  4. Ekstraksi Oracle BLOB Sangat Lambat

  5. Oracle SQL:Cara membaca dan menambah bidang