2

我有一棵树,我正试图将其存储在数据库中。现在每一行看起来像

ID, Child1, Child2, Child3, NodeValue

我有 Child1、Child2 和 Child3 作为引用 ID 的外键。

我想做的是:给定一个节点,获取该节点及其所有后代(我猜是“子树”)。但是,我想将节点的深度限制在 4 到 7 左右。

有没有人有一些指示?

编辑:

这是一个例子:

ID   C1   C2   C3
1    10   52   32
2    NULL NULL NULL
3    4    5    6
4    2    NULL NULL
5    NULL NULL NULL
6    NULL NULL NULL
10   3    NULL NULL
52   NULL NULL NULL
32   NULL NULL NULL

如果我想在第 1 行查询深度 2,它将返回 ID 为 1、10、52、32 和 3 的行,而不是 2、4、5 或 6

4

1 回答 1

2

在 SQLServer2005+ 上使用递归 CTE

;WITH cte AS
 (
 SELECT ID, C1, C2, C3, 0 AS [Level]
 FROM dbo.test7
 WHERE ID = 1 -- @your root node
 UNION ALL
 SELECT t.ID, t.C1, t.C2, t.C3, c.[Level] + 1
 FROM dbo.test7 t JOIN cte c ON t.ID IN (c.C1, c.C2, c.C3)
 WHERE c.[Level] + 1 <= 2 --@your_depth
 )
 SELECT ID, C1, C2, C3
 FROM cte

SQLFiddle上的演示

于 2013-01-15T07:36:36.133 回答