DB2遞歸查詢

斐波納契數列,又稱黃金分割數列,指的是這樣一個數列:一、一、二、三、五、八、1三、2一、……在數學上,斐波納契數列以以下被以遞歸的方法定義:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)spa

上面是對遞歸有個小小的瞭解。下面給出一個具體的例子3d

這個例子的做用是根據ID值找出該ID對應值下的地區有哪些?code

源代碼:blog

---db2遞歸查詢
CREATE TABLE AreaInfo
(
 ID       INTEGER NOT NULL PRIMARY KEY,
 ParentID  INT,
 NAME      VARCHAR(100)    
)

--
DROP TABLE AreaInfo

INSERT INTO AreaInfo VALUES(001,null,'雲南省');

INSERT INTO AreaInfo VALUES(002,001,'曲靖市');

INSERT INTO AreaInfo VALUES(003,001,'昭通市');

INSERT INTO AreaInfo VALUES(004,001,'昆明市');

INSERT INTO AreaInfo VALUES(005,002,'陸良縣');

INSERT INTO AreaInfo VALUES(006,002,'師宗縣');

INSERT INTO AreaInfo VALUES(007,006,'彩雲鎮');

INSERT INTO AreaInfo VALUES(008,006,'雄壁鎮');

INSERT INTO AreaInfo VALUES(009,005,'召誇鎮');

INSERT INTO AreaInfo VALUES(010,005,'馬街鎮');

INSERT INTO AreaInfo VALUES(011,010,'大西村');

INSERT INTO AreaInfo VALUES(012,009,'新莊村');

INSERT INTO AreaInfo VALUES(013,004,'官渡區');

INSERT INTO AreaInfo VALUES(014,013,'官渡鎮');

 

SELECT * FROM AreaInfo

查詢結果以下:遞歸

查詢出ID爲2所對應值下的地區:數學

WITH RPL (ID,ParentID,NAME) AS 
(
  SELECT ID,ParentID,NAME FROM AreaInfo WHERE ID=2 
  UNION ALL 
  SELECT child.id,child.ParentID,child.name FROM RPL parent,AreaInfo child WHERE parent.id=child.ParentID
)
SELECT * FROM RPL

查詢出ID爲9所對應值下的地區:class

WITH PPL (ID,ParentID,NAME) AS 
(
  SELECT ID,ParentID,NAME FROM AreaInfo WHERE ID=9
  UNION ALL
  SELECT child.ID,child.ParentID,child.NAME FROM PPL parent,AreaInfo child WHERE child.ParentID=parent.ID
)
SELECT * FROM PPL

 

相關文章
相關標籤/搜索