天天看點

DB2遞歸SQL

轉載位址: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'