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

вземете ВСИЧКИ деца от последно ниво (листа) от възел (йерархични заявки Oracle 11G)

Мисля, че нещо подобно би трябвало да свърши работа:

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

О, и между другото, можете да получите всички листа, без дори да използвате йерархична заявка. Просто изберете всички възли, които не са бащин възел за който и да е възел от релационната таблица. Нещо подобно:

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

За да получите листовите възли от посочения възел, просто променете условието в клаузата START WITH, за да започнете обръщането на дървото от възела, който ви интересува. Например, тази заявка ще ви върне всички дъщерни листа на възел с 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. Как да намерите дата от 48 работни часа, с изключение на събота, неделя и празници в Oracle

  2. Имам вмъкване в израз, но има грешка със запетая и просто не мога да я поправя

  3. Низ за свързване на Oracle ODP.NET:какво влиза в източника на данни?

  4. Коригиране на грешка ORA-65096 при създаване на автоматизирани тестове в Django с помощта на Oracle

  5. cx_Oracle.DatabaseError:ORA-12170:TNS:Възникна изчакване на връзката