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

Sql 在DB2中使用递归CTE从表中获取文件夹路径时出错?,sql,db2,hierarchical-data,recursive-query,db2-luw,Sql,Db2,Hierarchical Data,Recursive Query,Db2 Luw,我有一个包含列的表-OBJECT\u ID、NAME、PARENT\u CONTAINER\u ID。 此表包含所有文件夹名称及其父ID。如果父ID为空,则它是根文件夹。我需要拉一份所有文件夹及其完整路径的报告。但是下面的查询抛出错误 WITH containercte(OBJECT_ID, NAME, PARENT_CONTAINER_ID, LEVEL, treepath) AS (SELECT OBJECT_ID, NAME, PARENT_CONTAINER_ID, 0 AS LEVEL

我有一个包含列的表-OBJECT\u ID、NAME、PARENT\u CONTAINER\u ID。 此表包含所有文件夹名称及其父ID。如果父ID为空,则它是根文件夹。我需要拉一份所有文件夹及其完整路径的报告。但是下面的查询抛出错误

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;
有人能告诉我这个问题出了什么问题吗?它抛出的错误是

“递归公共表表达式的fullselect “集装箱运输”必须是两个或多个集装箱的联合体,并且不能 包括列函数、GROUPBY子句、HAVING子句、ORDER BY 子句,或包含ON子句的显式联接“


在DB2LUW中,不允许在递归公共表表达式中使用显式联接语法。在其他地方它们是可以的,但递归CTE是例外

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

我还建议在WHERE子句中添加一个停止条件 差不多

AND LEVEL < 8
和级别<8

在DB2LUW中,不允许在递归公共表表达式中使用显式连接语法。在其他地方它们是可以的,但递归CTE是例外

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

我还建议在WHERE子句中添加一个停止条件 差不多

AND LEVEL < 8
和级别<8

看起来像是学校的练习。学习SQL中的递归可能会有很多在线帮助。看起来像是学校的练习。了解SQL中的递归可能会有很多在线帮助……您至少可以明确指出,仅递归部分不允许显式联接吗?……您至少可以明确指出,仅递归部分不允许显式联接吗?
AND LEVEL < 8