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