簡體   English   中英

Oracle SQL按邏輯連接

[英]Oracle SQL Connect By Logic

當前,在我們的一種產品中,我們具有邏輯查詢,如下所示:

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_ID != MANAGER_ID表示懷疑。

問題是為什么要添加它,以及在什么情況下[如果有的話]會有用。

最后一個條件不適用於您的數據,但是避免無限遞歸非常重要。

為了說明這一點,請考慮如果在表中添加另一行會發生什么情況:

E40 E40

如果以E40而不是E90開頭,則Oracle會陷入無EMP_ID != MANAGER_ID條件的無限遞歸,因為E40將連接回E40

請注意,編寫此查詢的更好方法是使用NOCYCLE選項,而不是在顯式檢查中進行編碼:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM