Oracle SQL逻辑连接

Oracle SQL逻辑连接,sql,oracle,Sql,Oracle,目前,在我们的一款产品中,我们有一个逻辑查询,如下所述: create table temp (emp_id varchar2(3), manager_id varchar2(3) ) 数据: E10 E20 E20 E50 E30 E50 E50 E90 查询: select * from Temp Start with EMP_ID = 'E90' Connect by Prior EMP_ID = MANAGER_ID and EMP_ID != MANAGER_ID

目前,在我们的一款产品中,我们有一个逻辑查询,如下所述:

create table temp (emp_id varchar2(3), manager_id varchar2(3) )
数据:

E10 E20
E20 E50
E30 E50
E50 E90
查询:

select *
from Temp
    Start with EMP_ID = 'E90'
    Connect by Prior EMP_ID = MANAGER_ID and EMP_ID != MANAGER_ID
order by EMP_ID
我理解查询[&connect by]的概念,即我们需要获取指定员工的所有子记录,包括当前员工记录。我怀疑是否需要添加
EMP\u ID!=最后是经理ID


问题是为什么要添加它&在什么情况下它会有用(如果有的话)。

最后一个条件不适用于您的数据,但避免无限递归非常重要

为了说明这一点,考虑如果在表中添加另一行:

会发生什么情况?
E40 E40
如果您从
E40
开始,而不是从
E90
开始,Oracle将陷入一个没有
EMP\u ID!=管理器ID
条件,因为
E40
将连接回
E40

请注意,编写此查询的更好方法是使用
NOCYCLE
选项,而不是在显式检查中编码:

SELECT *
FROM Temp
    START WITH EMP_ID = 'E90'
    CONNECT BY NOCYCLE PRIOR EMP_ID = MANAGER_ID
ORDER BY EMP_ID