DB2遞歸查詢 遞歸 SQL 在 DB2 中通過公共表表達式 (CTE,Common Table Expression) 來實現。遞歸 SQL 由遞歸 CTE 以及對遞歸 CTE 結果的查詢組成。那什麼是遞歸 CTE 呢?簡言之,如果 CTE 中的 FULLSELECT 在 FROM 子句中引用到 CTE 本身,就是遞歸 CTE。遞歸 CTE 包含以下三個組成部分: 初始查詢 初始查詢是 CTE 中對基本表進行查詢的部分。CTE 定義中的第一個 FULLSELECT 必須不包含對 CTE 自身的應用,即必須是初始查詢。 遞歸查詢 遞歸查詢就是通過對 CTE 自身的引用,從而啟動遞歸邏輯的查詢。遞歸查詢需要遵循以下幾個規則 : 遞歸查詢和初始查詢結果必須包含相同數量的數據列; 遞歸查詢和初始查詢結果數據列的、長度等必須一致; 遞歸查詢不能包含 GROUP BY 或者 HAVING 子句; 遞歸查詢不能包含 Outer Join; 遞歸查詢不能包含子查詢 (Subquery); 遞歸查詢必須用 UNION ALL 聯結。 終止條件 終止條件通常是隱性的,即如果前一次遞歸查詢返回的結果集為空,則終止遞歸;但是也可以在遞歸查詢中設定終止條件,如限定遞歸查詢的深度等。 如有一張表:
Java代碼 CREATE TABLE NODE( ID INTEGER NOT NULL, PARENT_ID INTEGER NOT NULL);
查詢SQL:
Java代碼 WITH temp(id,parent_id,<span style="color: #0000ff;">level</span>) AS ( SELECT id,parent_id,0 FROM node WHERE <span style="color: #ff0000;">parent_id = 0 </span> UNION ALL SELECT b.id,b.parent_id,<span style="color: #0000ff;">a.level+1</span> FROM temp a,node b WHERE b.id= a.parent_id ) SELECT * FROM temp;