在oracle中显示父子层次结构

Display parent child hierarchy in oracle

我有一个像下面这样的 Oracle table


EMPNO   EMPNAME     MANAGERID
1       EMP1    
2       EMP2          1
3       EMP3          2

通过使用上面的 table,我想显示员工经理层次结构,如下所示,


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 中实现这一点?

对于 "standard" 层次结构,您需要此查询:

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

对于层次结构 "inverted" 此查询有效:

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