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

Премахване на дублирани поддървета от заявка CONNECT-BY в Oracle

Коренният възел в крайната йерархия трябва винаги да е известен. Съгласно дефиницията:http://en.wikipedia .org/wiki/Tree_structure основният възел е възел, който няма родители. За да проверите дали даден възел е основен възел, вземете "parent_id" и проверете в таблицата дали съществува запис с този идентификатор. Заявката може да изглежда така:

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. Трябва ли да използвам UCP на Oracle или HikariCP за модерно приложение?

  2. ORA-01722:невалиден номер в Entity Framework

  3. Заявката на Oracle е бавна (или неуспешна) от приложението .NET, но е бърза от SQL Developer

  4. Какво е необходимо за работа с Oracle от Visual Studio 2010?

  5. PL/SQL - Пример за грешка за повдигане на приложението