【发布时间】:2010-03-05 07:23:16
【问题描述】:
我有一个简单的加权图
A
1 / \\ 0.5
/ \\0.5
B C
假设这描述了一个家庭,A 是父亲,B 是儿子,C 是母亲。假设 B 在大学学习,A 为他买了一套公寓。 A和C住在共同拥有的房子里,50-50。
我想把图变成一棵树,从A开始:即。
- A 拥有 C 居住地 50% 的股份
- A 拥有 B 居住地的 100%
- C 拥有 A 居住地 50% 的股份
图表和生成的树可能更详细,但我希望你能得到更一般的图片。
在 SQL Server 2005 上我有
Drop Table #graph;
Create Table #graph
(FirstVertex VarChar(1) Not Null,
SecondVertex VarChar(1) Not Null,
Weight float);
Insert #graph Values('A','B',1);
Insert #graph Values('A','C',0.5);
Insert #graph Values('C','A',0.5);
我正在使用以下公用表表达式来遍历图形,从“A”开始:
With GraphRecursion (FirstVertex, SecondVertex, Weight, Level)
As
(
Select FirstVertex, SecondVertex, Weight, 0 As Level
From #graph
Where FirstVertex='A'
Union all
Select a.FirstVertex, a.SecondVertex, a.Weight, b.Level+1
From #graph a
Inner Join GraphRecursion b
On a.FirstVertex=b.SecondVertex --And b.Level<=1
)
Select * From GraphRecursion;
这导致
Msg 530, Level 16, State 1, Line 11
The statement terminated. The maximum recursion 100 has
been exhausted before statement completion.
通过取消注释 And b.Level<=1 来限制递归级别会产生预期的结果,但这显然对任何实际用途都不是很有用。
有没有办法引用之前的迭代,以便在上面的示例中边(即 FirstVertex、SecondVertex 对)不会重复?
【问题讨论】:
-
不确定这是否有帮助,但您是否查看过 MAXRECURSION 提示:msdn.microsoft.com/en-us/library/ms186243.aspx
标签: sql sql-server-2005 recursion graph common-table-expression