程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> DB2遞歸查詢

DB2遞歸查詢

編輯:DB2教程

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;  

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved