【发布时间】:2019-06-14 11:46:10
【问题描述】:
有一个表结构如下(简化):
RowID FK_RowID
1 3
2 1
3 11
4 2
5 4
6 1
7 8
8 9
9
10
11
我想要的是获得所有链接的 RowID 的列表,以及链接的 RowID。
例如,我想要 RowID 1 的所有链接 RowID,我希望得到以下列表:
2
3
4
5
6
11
我尝试了以下 CTE,但我只得到 2、3、6、11:
;WITH CTE
AS (
SELECT RowID, FK_RowID, 1 AS Depth
FROM tbl
WHERE RowID = 1
UNION ALL
SELECT e.RowID, e.FK_RowID, CTE.Depth + 1 AS Depth
FROM CTE
INNER JOIN tbl AS e
ON e.RowID = CTE.FK_RowID
WHERE CTE.Depth < 50
)
SELECT DISTINCT RowID
FROM CTE
WHERE RowID <> 1
UNION
SELECT RowID FROM tbl WHERE FK_RowID = 1
它只获得直接路径 1 --> 3 --> 11 但我也需要其他路径:2 --> 4 --> 5
有什么想法吗?
【问题讨论】:
标签: sql sql-server common-table-expression recursive-query