1

我有一个通过两个字段存储递归记录的表:ID 和 PARENTID。

我有一个功能可以将父级关联到树的元素。当我选择可以是我自己的“父”元素时,我显然会从结果列表中排除直接或间接依赖于我的所有元素,以及我已经依赖的元素。

让我们举个例子。给定以下示例层次结构:

ID                  PARENT_ID
-----------         ------------------
1                    NULL
2                    1
3                    NULL
4                    2
5                    1
6                    3

如果我想找到可以作为元素父级的元素,ID = 4我将只考虑元素5 - 3 - 6,因为它们与实际结构没有任何关系。

如何通过 CTE 查询获取这些元素?

4

1 回答 1

1
Select *
into #tmp
From Tree2

;WITH Rollups AS (
    SELECT ID, Parent_Id
    FROM tree2 where ID=4
    UNION ALL
    SELECT parent.Id, parent.Parent_Id
    FROM tree2 parent 
    INNER JOIN Rollups child ON child.Id = parent.Parent_Id
)
Delete #tmp from Rollups where #tmp.ID=Rollups.ID

;WITH Rollups AS (
    SELECT ID, Parent_Id
    FROM tree2 where ID=4
    UNION ALL
    SELECT parent.Id, parent.Parent_Id
    FROM tree2 parent 
    INNER JOIN Rollups child ON child.Parent_Id = parent.Id
)
Delete #tmp from Rollups where #tmp.ID=Rollups.ID

Select * from #tmp
Drop Table #tmp 
于 2012-11-12T19:22:39.677 回答