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

dapatkan SEMUA anak level terakhir (daun) dari sebuah simpul (kueri hierarkis Oracle 11G)

Saya pikir, hal seperti itu seharusnya berhasil:

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH r.id_father IS NULL)
WHERE isleaf = 1

Oh, dan omong-omong, Anda bisa mendapatkan semua daun bahkan tanpa menggunakan kueri hierarkis. Cukup pilih semua simpul, yang bukan simpul ayah untuk simpul mana pun dari tabel relasi. Sesuatu seperti itu:

SELECT n.* FROM NODES n
WHERE NOT EXISTS (SELECT ID_FATHER FROM RELATION r
                  WHERE r.id_father = n.id)

Untuk mendapatkan simpul daun dari simpul yang ditentukan, cukup ubah kondisi di klausa MULAI DENGAN, untuk memulai pembalikan pohon dari simpul yang Anda minati. Misalnya, kueri ini akan mengembalikan Anda semua anak daun simpul dengan id =5 :

SELECT * FROM
(SELECT n.id, n.val, CONNECT_BY_ISLEAF isleaf FROM NODES n 
       LEFT JOIN RELATION r ON n.id = r.id_child
CONNECT BY PRIOR n.id = r.id_father
START WITH n.id = 5)
WHERE isleaf = 1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. JIKA kondisi lain dalam prosedur tersimpan sql

  2. Bagaimana cara mengembalikan tanggal hari ini ke variabel di Oracle

  3. Klien Oracle memerlukan tanda kurung di sekitar nama kolom?

  4. Berjuang dengan pegas SimpleJdbcCall untuk memanggil fungsi Oracle

  5. Bagaimana cara mengekstrak data dari sistem SAP ABAP?