有一个具有以下结构(简化)的表:
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为RowID 1,我希望得到以下列表:
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
有什么想法吗?
答案 0 :(得分:2)
您需要在两个方向上遍历层次结构:
nc