DB2--使用WITH AS(CTE)進行查詢、遞歸失敗的記錄


  最近由於工作需要,使用的是DB2數據庫存儲數據,在這里記錄一下使用WITH AS(也叫公共表達式CTE)遞歸查詢機構數據碰到的問題。

WITH AS使用需要列出詳細的字段名

  我在DB2中使用CTE時,需要在CTE的名字旁帶上所需的列名,需要多少列,就寫出多少列,如下是:

  錯誤寫法:

  正確寫法:

WITH ORG_INFO_PROCESS(RAW_ORG_ID,ORG_ID,SUP_ID) AS
(
SELECT ORG.ORG_ID AS RAW_ORG_ID,ORG.ORG_ID,ORG.SUP_ID FROM ORG_INFO ORG
)SELECT * FROM ORG_INFO_PROCESS ORDER BY RAW_ORG_ID,ORG_ID

  CTE表達式名后面跟上具體的列名才是正確的寫法

遞歸調用CTE時不能使用JOIN,必須使用多表內連接

  我在DB2中使用CTE時,由於查詢機構的所有上級機構需要遞歸該CTE,於是就使用了JOIN,結果還是報錯,后來換成多表內連接查詢才成功,如下:

  錯誤寫法:

  正確寫法:

WITH ORG_INFO_PROCESS(RAW_ORG_ID,ORG_ID,SUP_ID) AS
(
SELECT ORG.ORG_ID AS RAW_ORG_ID,ORG.ORG_ID,ORG.SUP_ID FROM ORG_INFO ORG
UNION ALL 
SELECT ORG2.RAW_ORG_ID,ORG1.ORG_ID,ORG1.SUP_ID 
FROM ORG_INFO_PROCESS ORG2,ORG_INFO ORG1
WHERE ORG2.SUP_ID=ORG1.ORG_ID )SELECT * FROM ORG_INFO_PROCESS ORDER BY RAW_ORG_ID,ORG_ID

  在DB2中CTE遞歸只能使用【select * FROM table1,table2 where 關聯條件】才符合查詢。

 


免責聲明!

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



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