sql >> Database teknologi >  >> RDS >> Oracle

Find den mest underordnede node af en forælder (et hvilket som helst niveau) i oracle

Med "mest børneknude" forventer jeg, at du mener træets bladknuder. Du kan bestemme bladknuderne med CONNECT_BY_ISLEAF pseudokolonne af en hierarkisk (CONNECT BY ) forespørgsel.

Givet dine eksempeldata i en tabel, giver følgende forespørgsel de ønskede resultater:

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

Under hensyntagen til dine opdaterede data og krav, herunder det faktum, at en anden tabel indeholder a, b og c som startbetingelser:

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 Du kan lære mere om hierarkiske forespørgsler fra dokumentationen .



  1. MySQL - tving til ikke at bruge cache til at teste forespørgselshastigheden

  2. Hvordan opretter man forbindelse til ekstern MySQL-server via SSH ved hjælp af JPA?

  3. Oracle-ekstrakt fra xml-afkortningsværdi

  4. Menu på flere niveauer med PHP/MySQL