1

我有一个递归查询,当我运行它时会返回错误;在其他数据库中(有更多数据)我没有问题。在我的情况下,此查询返回 2 个列(ID_PARENT 和 ID_CHILD)进行递归,因为我的树可以有多个级别,我只想有“直接”父级。

注意:我尝试将 OPTION (MAXRECURSION 0) 放在查询的末尾,但没有运气。以下查询只是整个查询的一部分,我尝试仅将 OPTION 放在具有连续运行查询的“大查询”的末尾,但没有显示错误。

SQL Server 中出现错误:

“语句终止。在语句完成之前,最大递归 100 已用完”

查询如下:

WITH q
     AS (SELECT ID_ITEM,
                ID_ITEM AS ID_ITEM_ANCESTOR
         FROM   ITEMS_TABLE i
                JOIN ITEMS_TYPES_TABLE itt
                  ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE
         UNION ALL
         SELECT i.ID_ITEM,
                q.ID_ITEM_ANCESTOR
         FROM   q
                JOIN ITEMS_TABLE i
                  ON i.ID_ITEM_PADRE = q.ID_ITEM
                JOIN ITEMS_TYPES_TABLE itt
                  ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE)
SELECT ID_ITEM          AS ID_CHILD,
       ID_ITEM_ANCESTOR AS ID_PARENT
FROM   q 

我需要一个建议来重新编写此查询以避免递归错误并查看很少的数据。

4

2 回答 2

1

好的,经过一番调查,由于某种原因,在 2 条记录中存在循环引用:ITEM 1 是 ITEM 2 的子项,ITEM 2 是 ITEM 1 的子项。

手动更改值,查询运行完美。

于 2012-12-04T17:26:25.237 回答
0
WITH    q AS ( SELECT   ID_ITEM ,
                        ID_ITEM AS ID_ITEM_ANCESTOR
               FROM     ITEMS_TABLE i
                        JOIN ITEMS_TYPES_TABLE itt ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE
               UNION ALL
               SELECT   i.ID_ITEM ,
                        q.ID_ITEM_ANCESTOR
               FROM     q
                        JOIN ITEMS_TABLE i ON i.ID_ITEM_PADRE = q.ID_ITEM
                        JOIN ITEMS_TYPES_TABLE itt ON itt.ID_ITEM_TYPE = i.ID_ITEM_TYPE
             )
    SELECT  ID_ITEM AS ID_CHILD ,
            ID_ITEM_ANCESTOR AS ID_PARENT
    FROM    q
OPTION  ( MAXRECURSION 500 )
于 2014-08-14T06:26:30.003 回答