Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Finden Sie den am meisten untergeordneten Knoten eines Elternteils (beliebige Ebene) in Oracle

Mit "die meisten untergeordneten Knoten" meinen Sie vermutlich die Blattknoten des Baums. Die Blattknoten können Sie mit dem CONNECT_BY_ISLEAF bestimmen Pseudospalte einer hierarchischen (CONNECT BY ) Abfrage.

Ausgehend von Ihren Beispieldaten in einer Tabelle liefert die folgende Abfrage die gewünschten Ergebnisse:

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-Geige

Unter Berücksichtigung Ihrer aktualisierten Daten und Anforderungen einschließlich der Tatsache, dass eine zweite Tabelle a, b und c als Startbedingungen enthält:

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-Geige Weitere Informationen zu hierarchischen Abfragen finden Sie in der Dokumentation .