最近由於工作需要,使用的是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 關聯條件】才符合查詢。