Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Usuwanie zduplikowanych poddrzew z zapytania CONNECT-BY w Oracle

Węzeł główny w skończonej hierarchii musi być zawsze znany.Zgodnie z definicją:http://en.wikipedia .org/wiki/Struktura_drzewa węzeł główny jest węzłem, który nie ma rodziców. Aby sprawdzić, czy dany węzeł jest węzłem głównym, weź „parent_id” i sprawdź w tabeli, czy istnieje rekord o tym identyfikatorze. Zapytanie może wyglądać tak:

SELECT id,parent_id,
  CONNECT_BY_ISLEAF leaf,
  LEVEL,
  SYS_CONNECT_BY_PATH(id, '/') Path,
  SYS_CONNECT_BY_PATH(parent_id, '/') Parent_Path
FROM tree_hierarchy th
WHERE CONNECT_BY_ISLEAF<>0
  CONNECT BY PRIOR id = PARENT_id
START WITH not exists (
      select 1 from tree_hierarchy th1 
      where th1.id = th.parent_id
  )
ORDER SIBLINGS BY ID;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. łączenie wielu stołów

  2. Oracle SQL:Filtrowanie według ROWNUM nie zwraca wyników, gdy powinno

  3. .NET / Oracle:Jak programowo wykonać skrypt z instrukcjami DDL

  4. Jak utworzyć GROUP BY w dniu min i max?

  5. Uzyskanie rzeczywistego planu wykonania w Oracle 11g