sql >> Database >  >> RDS >> Oracle

Vind de hele boom vanaf de wortel en geef een willekeurig knooppunt

U moet eerst de boom op om alle managers te krijgen en vervolgens naar beneden om alle werknemers op te halen:

select level, employee_id, last_name, manager_id ,
       connect_by_root employee_id as root_id
   from employees
connect by prior employee_id = manager_id -- down the tree
start with manager_id in ( -- list up the tree
     select manager_id 
       from employees
     connect by employee_id = prior manager_id -- up the tree
     start with employee_id = 101
     )
;

Zie http://www.sqlfiddle.com/#!4/d15e7/18

Bewerken:

Als het opgegeven knooppunt ook het hoofdknooppunt kan zijn, breid dan de query uit om het opgegeven knooppunt op te nemen in de lijst met bovenliggende knooppunten:

Voorbeeld voor niet-rootknooppunt:

select distinct employee_id, last_name, manager_id 
   from employees
connect by prior employee_id = manager_id -- down the tree
start with manager_id in ( -- list up the tree
     select manager_id 
       from employees
     connect by employee_id = prior manager_id -- up the tree
     start with employee_id = 101
     union 
     select manager_id -- in case we are the root node
       from employees
     where manager_id = 101
     )
;

Voorbeeld voor hoofdknooppunt:

select distinct employee_id, last_name, manager_id 
   from employees
connect by prior employee_id = manager_id -- down the tree
start with manager_id in ( -- list up the tree
     select manager_id 
       from employees
     connect by employee_id = prior manager_id -- up the tree
     start with employee_id = 100
     union 
     select manager_id -- in case we are the root node
       from employees
     where manager_id = 100
     )
;

Fiddle op http://www.sqlfiddle.com/#!4/d15e7/32



  1. MySQL vindt duplicaten op basis van een andere kolomwaarde

  2. PostgreSQL 9.0.4 volledig verwijderen van Mac OSX Lion?

  3. kopieer databasestructuur zonder gegevens in mysql (met lege tabellen)

  4. Mijn eenvoudige MySql-query gebruikt geen index