我们如何使用oracle SQL层次结构查询为每个员工打印整个员工层次结构。
示例员工表>>
EmpID, ENAME, MGR
1, A, 1
2, B, 1
3, C, 2
4, C, 2
5, C, 3
样本输出>>
EmpID, ENAME, Hierarchy
1, A, -
2, B, /1
3, C, /1/2
4, C, /1/2
5, C, /1/2/3
有人能帮助我吗?提前谢谢。
答案 0 :(得分:2)
没有数据库可以对此进行测试,但您认为需要使用SYS_CONNECT_BY_PATH
和CONNECT BY PRIOR
。尝试类似:
SELECT EmpID, ENAME, SYS_CONNECT_BY_PATH(MGR, '/') "Heirarchy"
FROM Employee
CONNECT BY PRIOR EmpID= MGR;
答案 1 :(得分:0)
使用公用表表达式(CTE):
测试数据:
create table tq84_sample_employee (
empid number primary key,
ename varchar2(10),
mgr number references tq84_sample_employee
);
insert into tq84_sample_employee values(1, 'A', 1);
insert into tq84_sample_employee values(2, 'B', 1);
insert into tq84_sample_employee values(3, 'C', 2);
insert into tq84_sample_employee values(4, 'C', 2);
insert into tq84_sample_employee values(5, 'C', 3);
选择带有CTE的声明:
with e(empId, ename, hierarchy) as (
select
t.empId,
t.ename,
null
from
tq84_sample_employee t
where
empId = mgr
UNION ALL
select
t.empId,
t.ename,
e.hierarchy || '/' || e.empId
from
tq84_sample_employee t join
e e on t.mgr = e.empId
where
t.empId != t.mgr
)
select
empId,
ename,
nvl(hierarchy, '-') hierarchy
from e;
清理
drop table tq84_sample_employee;
注意,我已将mgr
的{{1}}设置为empId=1
,因为从技术上讲,有人不是他自己的经理。层次结构中最顶层的人没有经理,因此在技术上更正确地设置经理。这也将使相关陈述更容易。