sql >> Database >  >> RDS >> Oracle

Vind het meest onderliggende knooppunt van een ouder (elk niveau) in orakel

Met "meest kindknooppunt" verwacht ik dat je de bladknopen van de boom bedoelt. U kunt de bladknooppunten bepalen met de CONNECT_BY_ISLEAF pseudo-kolom van een hiërarchische (CONNECT BY ) vraag.

Gezien uw voorbeeldgegevens in een tabel levert de volgende zoekopdracht de gewenste resultaten op:

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

Rekening houdend met uw bijgewerkte gegevens en vereisten, inclusief het feit dat een tweede tabel a, b en c als startvoorwaarden bevat:

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 U kunt meer leren over hiërarchische zoekopdrachten in de documentatie .



  1. Hoe de ORACLE_HOME-variabele correct instellen op Ubuntu 9.x?

  2. Oracle gematerialiseerde weergaven met primaire sleutel

  3. Hoe u het aantal werkdagen aan de opgegeven datum kunt toevoegen

  4. Hoe opgeslagen proces in log4net-configuratie voor SQL Server te gebruiken voor logboekregistratie