oracle - Querying hierarchical data through SQL -
problem:
different ways of querying hierarchical data through sql querying subset of branch information.
case study :
employees table :
desc employees name null type -------------- -------- ------------ employee_id not null number(6) first_name varchar2(20) last_name not null varchar2(25) manager_id number(6) department_id number(4)
premises:
president employee doesn't have manager i.e. null.
there leaf nodes eg developers manages none i.e. employee_id not in manager_id.
there 1rst line managers manages developers, 2nd line managers managers 1rst line , on.....
i managers below query:
select manager_id, employee_id employees o exists (select * employees o.employee_id = i.manager_id) , manager_id not null order o.manager_id, o.employee_id;
and president below:
select manager_id, employee_id employees o exists (select * employees o.employee_id = i.manager_id) , manager_id null order o.manager_id, o.employee_id;
how should 2nd line managers through exists
key word ?
how should 2nd line managers without using exists
?
what different ways of getting hierarchical data ?
and regarding performance of queries.
this basic query gets in 1 go:
select employee_id, first_name, last_name, case when level = 1 'president' when level = 2 '1st line manager' when level = 3 '2nd line manager' when connect_by_isleaf = 1 'developer' end employee_type employees start manager_id null connect prior employee_id = manager_id
the level
pseudo column available in connect by
query defines distance start (which defined start with
). president has level = 1
if want 2nd line managers, can add where level = 3
statement. 1st line manager use where level = 2
Comments
Post a Comment