我有一个表通过两个字段存储递归记录:ID和PARENTID。
我有一个可以将父级关联到树的元素的功能。当我选择可以" parent"对于我自己,我显然会从结果列表中排除所有直接或间接依赖于我的元素,以及我已经依赖的元素。
让我们举个例子。给出以下样本层次结构:
ID PARENT_ID
----------- ------------------
1 NULL
2 1
3 NULL
4 2
5 1
6 3
如果我想找到可以是ID = 4
元素父元素的元素,我只考虑元素5 - 3 - 6
,因为它们与实际结构没有任何关系。
如何通过CTE查询获取这些元素?
答案 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