sql >> Databasteknik >  >> RDS >> Oracle

Hitta den mest underordnade noden för en förälder (valfri nivå) i oracle

Med "mest barnnod" förväntar jag mig att du menar trädets lövnoder. Du kan bestämma lövnoderna med CONNECT_BY_ISLEAF pseudokolumn i en hierarkisk (CONNECT BY ) fråga.

Med tanke på dina exempeldata i en tabell ger följande fråga de önskade resultaten:

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

Med hänsyn till dina uppdaterade data och krav, inklusive det faktum att en andra tabell innehåller a, b och c som startvillkor:

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ära dig mer om hierarkiska frågor från dokumentationen .



  1. SQL-datumformat:Hur man hanterar det på ett smart sätt

  2. MySQL Workbench:Kan inte ansluta till MySQL-servern på 127.0.0.1' (10061) fel

  3. Mina favoritpostgreSQL-frågor och varför de är viktiga

  4. PDO skapar databas och tabeller