DB2遞歸查詢


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

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

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

源代碼:

---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所對應值下的地區:

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM