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