我有以下查询来查找oracle的EMP表中不是经理的员工
select * from emp e1
where not exists (select null from emp e2
where e2.mgr=e1.empno)
我需要使用start with connect by子句输出,从而避免自联接
答案 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