如何使用CTE从分层视图中获取元素

时间:2012-11-12 18:39:16

标签: sql-server sql-server-2008 common-table-expression

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

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

让我们举个例子。给出以下样本层次结构:

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

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

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

1 个答案:

答案 0 :(得分: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