Par "nœud le plus enfant", je suppose que vous entendez les nœuds feuilles de l'arbre. Vous pouvez déterminer les nœuds feuilles avec le CONNECT_BY_ISLEAF
pseudo-colonne d'une hiérarchie (CONNECT BY
) requête.
Étant donné vos exemples de données dans une table, la requête suivante donne les résultats souhaités :
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 |
En tenant compte de vos données mises à jour et de vos exigences, y compris le fait qu'une deuxième table contient a, b et c comme conditions de départ :
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 Vous pouvez en savoir plus sur les requêtes hiérarchiques dans la documentation .