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 关联条件】才符合查询。