轉載位址:https://blog.csdn.net/tianlincao/article/details/7258383
轉載說明:隻是為了學習,如有冒犯,會随時删除。
遞歸sql在DB2中通過公共表達式 (CTE,Common Table Expression) 來實作。遞歸sql由遞歸CTE及對遞歸CTE結果的查詢組成。如果CTE中的FULLSELET在FROM子句中應用到CTE本身,就是遞歸CTE。遞歸CTE包含以下但部分:
1.初始查詢
初始查詢是CTE中對基本表進行查詢的部分,CTE 定義中的第一個 FULLSELECT 必須不包含對 CTE 自身的應用,即必須是初始查詢。
2.遞歸查詢
遞歸查詢就是通過對 CTE 自身的引用,進而啟動遞歸邏輯的查詢。遞歸查詢需要遵循以下幾個規則 :
遞歸查詢和初始查詢結果必須包含相同數量的資料列;
遞歸查詢和初始查詢結果資料列的、長度等必須一緻;
遞歸查詢不能包含 GROUP BY 或者 HAVING 子句;
遞歸查詢不能包含 Outer Join;
遞歸查詢不能包含子查詢 (Subquery);
遞歸查詢必須用 UNION ALL 聯結。
3.終止條件
終止條件通常是隐性的,即如果前一次遞歸查詢傳回的結果集為空,則終止遞歸;但是也可以在遞歸查詢中設定終止條件,如限定遞歸查詢的深度等。
WITH corp (corpid, corpname, parentcorpid,corpstate) AS ( SELECT
corp1.corpid,corp1.corpname, corp1.parentcorpid,corp1.corpstate FROM t_corpinfo corp1 where
corp1.corpid='null'
UNION ALL
SELECT CHILD.corpid, CHILD.corpname, CHILD.parentcorpid, CHILD.corpstate FROM corp PARENT,
t_corpinfo CHILD WHERE PARENT.corpid= CHILD.parentcorpid )
select corp.corpidfrom corp where corp.corpstate = '0'