我有一个如下表所示的Oracle表
EMPNO EMPNAME MANAGERID
1 EMP1
2 EMP2 1
3 EMP3 2
通过使用上表,我想显示员工经理层次结构,如下所示
EMPNO EMPNAME EMPHIERARCHY (Contains EMP name and Manager Name(Managers Manager as well))
1 EMP1
2 EMP2 EMP2,EMP1
3 EMP3 EMP3,EMP2,EMP1
有人可以指导我如何在Oracle中实现这一目标吗?
答案 0 :(得分:1)
对于"标准"您需要此查询的层次结构:
select empno, empname, sys_connect_by_path(empname, '/') hierarchy
from test connect by managerid = prior empno start with managerid is null
输出:
EMPNO EMPNAME HIERARCHY
----------- ---------- ----------------
1 EMP1 /EMP1
2 EMP2 /EMP1/EMP2
3 EMP3 /EMP1/EMP2/EMP3
对于等级"倒置"这个查询有效:
select root1 empno, root2 empname, hierarchy from (
select empno, empname, managerid, prior empname,
sys_connect_by_path(empname, '/') hierarchy, connect_by_isleaf leaf,
connect_by_root(empno) root1, connect_by_root(empname) root2
from test connect by prior managerid = empno
) where leaf = 1
输出:
EMPNO EMPNAME HIERARCHY
---------- ---------- ----------------
1 EMP1 /EMP1
2 EMP2 /EMP2/EMP1
3 EMP3 /EMP3/EMP2/EMP1
有关hierarchical queries的更多信息。