sql >> Databáze >  >> RDS >> Oracle

Najděte nejvíce podřízený uzel rodiče (jakékoli úrovně) v oracle

Očekávám, že výrazem "většina podřízeného uzlu" máte na mysli listové uzly stromu. Listové uzly můžete určit pomocí CONNECT_BY_ISLEAF pseudo sloupec hierarchického (CONNECT BY ) dotaz.

Vzhledem k vašim ukázkovým datům v tabulce poskytuje následující dotaz požadované výsledky:

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

Vezmeme-li v úvahu vaše aktualizovaná data a požadavky, včetně skutečnosti, že druhá tabulka obsahuje a, b a c jako počáteční podmínky:

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 Další informace o hierarchických dotazech naleznete v dokumentaci .



  1. HROMADNÉ VLOŽENÍ v MYSQL

  2. Export tabulky mysql do souboru .txt nebo .doc pomocí PHP

  3. JSON_REMOVE() – Odebrání dat z dokumentu JSON v MySQL

  4. Refaktorujte cizí klíč na pole