我有一棵树,我试图存储在数据库中。 现在每行看起来像
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
答案 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上的演示