获取给定ID(CTE)的同一表的所有链接ID

时间:2019-06-14 11:46:10

标签: sql sql-server common-table-expression recursive-query

有一个具有以下结构(简化)的表:

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

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

您需要在两个方向上遍历层次结构:

nc