【发布时间】:2019-03-21 18:58:32
【问题描述】:
我正在尝试构建一个深度递归自联接查询。有这样的表:
Id | ParentId
1 | NULL
2 | 1
3 | 1
4 | 2
5 | 3
6 | 8
7 | 9
对于 Id 1,我的查询应该获取 1、2、3、4、5,因为它们要么是 1 的孩子,要么是 1 的孩子的孩子。在给定的示例中,6 和 7 不应包含在查询中结果。
我尝试使用 CTE,但我收到大量重复:
WITH CTE AS (
SELECT Id, ParentId
FROM dbo.Table
WHERE ParentId IS NULL
UNION ALL
SELECT t.Id, t.ParentId
FROM dbo.Table t
INNER JOIN CTE c ON t.ParentId = c.Id
)
SELECT * FROM CTE
想法?
【问题讨论】:
-
你的结果不会包括 6 和 7。你是什么意思得到吨重复?
-
ibb.co/TPxHXVj - 抱歉链接,不知道我该如何在评论中格式化它。谢谢。
-
您是否需要能够从层次结构中的任意点开始并沿树向下遍历(例如,在本例中,您是否希望能够从 Id = 2 开始)?
标签: sql sql-server recursion recursive-query