Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Encontre o nó mais filho de um pai (qualquer nível) no oracle


Por "nó mais filho", espero que você queira dizer os nós folha da árvore. Você pode determinar os nós folha com o CONNECT_BY_ISLEAF pseudo coluna de uma coluna hierárquica (CONNECT BY ) consulta.

Dados seus dados de exemplo em uma tabela, a consulta a seguir produz os resultados desejados:
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

Levando em consideração seus dados e requisitos atualizados, incluindo o fato de que uma segunda tabela contém a, b e c como as condições de início:
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 Você pode saber mais sobre consultas hierárquicas na documentação .