不确定如何编写connect by

时间:2015-06-14 12:32:23

标签: oracle hierarchical-data connect-by

我有以下查询来查找oracle的EMP表中不是经理的员工

 select * from emp e1
 where not exists (select null from emp e2 
                    where e2.mgr=e1.empno)

我需要使用start with connect by子句输出,从而避免自联接

1 个答案:

答案 0 :(得分:1)

有一个函数CONNECT_BY_ISLEAF(),它指示分层查询中的给定行是否为叶节点。在EMP表中,非管理员的员工将是叶节点。

因此,我们可以在嵌套的分层查询中使用此函数来过滤非管理员:

select empno, mgr, ename 
from (
    select empno, mgr, ename, CONNECT_BY_ISLEAF cbi
    from emp 
    start with mgr is null 
    connect by prior empno = mgr
) where cbi = 1
/

Oracle有几个简洁的函数来询问层次结构。 Find out more