在相關業務查詢中,我們常常遇到相關的上下級關系情況,如組織層級等,這個時候可以使用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實現遞歸查詢,生成樹)