首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在DB2中使用递归CTE从表中获取文件夹路径时出错?

在DB2中使用递归CTE从表中获取文件夹路径时出错?
EN

Stack Overflow用户
提问于 2018-07-11 20:06:11
回答 1查看 340关注 0票数 0

我有一个有列的表-- OBJECT_ID,NAME,PARENT_CONTAINER_ID。这个表包含了所有的文件夹名称和它们的ParentID。如果父ID为空,则它是根文件夹。我需要一份包含所有文件夹及其完整路径的报告。但是下面的查询抛出错误..

代码语言:javascript
复制
WITH containercte(OBJECT_ID, NAME, PARENT_CONTAINER_ID, LEVEL, treepath) AS
(SELECT OBJECT_ID, NAME, PARENT_CONTAINER_ID, 0 AS LEVEL, CAST(NAME AS VARCHAR(1024)) AS treepath FROM CONTAINER 
WHERE PARENT_CONTAINER_ID IS NULL
UNION ALL 
SELECT d.OBJECT_ID AS OBJECT_ID, d.NAME, d.PARENT_CONTAINER_ID,
containercte.LEVEL + 1 AS LEVEL,
CAST(containercte.treepath + '-> ' + CAST(d.NAME AS VARCHAR(1024)) AS VARCHAR(1024)) AS treepath FROM CONTAINER d
INNER JOIN containercte
ON containercte.OBJECT_ID = d.PARENT_CONTAINER_ID)
SELECT * FROM containercte ORDER BY treepath;

有人能告诉我这个查询出了什么问题吗?它抛出的错误是

“递归公用表表达式"CONTAINERCTE”的fullselect必须是两个或多个fullselect的联合,并且不能包括列函数、GROUP BY子句、HAVING子句、ORDER BY子句或包含ON子句的显式连接“

EN

回答 1

Stack Overflow用户

发布于 2018-07-12 01:53:24

在Db2 LUW中,不允许在递归公用表表达式中使用显式join语法。它们在其他地方都可以,但递归CTE是个例外。

重写查询以使用旧的连接语法重写

代码语言:javascript
复制
FROM CONTAINER d
INNER JOIN containercte
ON containercte.OBJECT_ID = d.PARENT_CONTAINER_ID)

代码语言:javascript
复制
FROM CONTAINER d,
containercte
WHERE containercte.OBJECT_ID = d.PARENT_CONTAINER_ID
  AND ...

我建议在WHERE子句中添加一个停止条件,如下所示

代码语言:javascript
复制
AND LEVEL < 8
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51285075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档