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

Намерете най-дъщерния възел на родител (всяко ниво) в Oracle

Предполагам, че под „повече дъщерен възел“ имате предвид листните възли на дървото. Можете да определите листовите възли с CONNECT_BY_ISLEAF псевдо колона на йерархична (CONNECT BY ) заявка.

Предвид вашите примерни данни в таблица, следната заявка дава желаните резултати:

select connect_by_root id id
     , parent_did
  from table1
 where connect_by_isleaf = 1
connect by id = prior parent_did
  start with id in ('a','b','c');

| ID | PARENT_DID |
|----|------------|
|  a |          f |
|  a |          g |
|  a |          h |
|  b |          f |
|  b |          g |
|  b |          h |
|  c |          f |

SQL Fiddle

Вземайки под внимание вашите актуализирани данни и изисквания, включително факта, че втора таблица съдържа a, b и c като начални условия:

select connect_by_root parent_id parent_id
     , id
  from table1
 where connect_by_isleaf = 1
connect by prior id = parent_id
  start with parent_id in (select id from table2)

| PARENT_ID | ID |
|-----------|----|
|         a |  f |
|         a |  g |
|         a |  h |
|         b |  f |
|         b |  g |
|         b |  h |
|         c |  f |

SQL Fiddle Можете да научите повече за йерархичните заявки от документацията .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да инсталирате perl DBD::Oracle на OSX Snow Leopard 10.6

  2. Налагане на уникален/първичен ключ - индекс за премахване

  3. Oracle счита празните низове за NULL, докато SQL Server не го прави - как се справя най-добре с това?

  4. Как да използвам параметри в клауза 'where value in...'?

  5. C# Как да анализирам низ от дата в произволен зададен формат на дата на Oracle?