SQL server树限制深度查询

时间:2013-01-15 05:39:25

标签: sql sql-server tree b-tree

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

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

1 个答案:

答案 0 :(得分:2)

在SQL Server 2005中使用递归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上的演示