在oracle中显示父子层次结构

时间:2015-04-20 10:24:06

标签: sql oracle recursive-query

我有一个如下表所示的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中实现这一目标吗?

1 个答案:

答案 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

对于等级"倒置"这个查询有效:

SQLFiddle

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的更多信息。