oracle中進行遞歸查詢


在相關業務查詢中,我們常常遇到相關的上下級關系情況,如組織層級等,這個時候可以使用oracle提供的start with 關鍵字進行遞歸查詢。

語法如下:

SELECT ... FROM + 表名
START WITH + 條件1
CONNECT BY PRIOR + 條件2
WHERE + 條件3

條件1:是根節點的限定語句,當然可以放寬限定條件,以取得多個根節點,也就是多棵樹;在連接關系中,除了可以使用列名外,還允許使用列表達式。

START WITH 子句為可選項,用來標識哪個節點作為查找樹形結構的根節點。若該子句省略,則表示所有滿足查詢條件的行作為根節點。

條件2:是連接條件,其中用PRIOR表示上一條記錄,例如CONNECT BY PRIOR a_pid = a_id,意思就是上一條記錄的a_pid是本條記錄的a_id,即本記錄的父親是上一條記錄。CONNECT BY子句說明每行數據將是按照層次順序檢索,並規定將表中的數據連入樹形結構的關系中。

PRIOR運算符必須放置在連接關系的2列中某一個的前面。對於節點間的父子關系,PRIOR運算符在一側表示父節點,在另一側表示子節點,從而確定查找樹結構的順序是自頂向下,還是自底向上。

條件3:是過濾條件,用於對返回的記錄進行過濾。

SQL示例如下:

-- 遞歸查詢 上一條記錄的orgno是本條記錄的parentorgno,即本記錄的父親是上一條記錄。
SELECT * FROM sys_org t1 START WITH t1.orgno = '100999' CONNECT BY PRIOR t1.orgno = t1.parentorgno ;

參考博文:
(1)https://www.cnblogs.com/widget90/p/9385791.html (oracle sql實現遞歸查詢,生成樹)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM