大家好!我有一张图表。首先,我知道如何构建简单递归选择。我在 msdn 上阅读了一些信息。
在该图像中,您可以看到(例如)图形的顶部节点(编号为0)影响节点编号1(等(2-> 4),(3-> 4),(4-> 4)。 5),(5-> 6),(1-> 5))
任务:每个节点显示它影响的节点。例如, 数字1影响5和6。
结果SQL必须返回如下内容:
who_acts| on_whom_influence
0 | 1
0 | 5
0 | 6
1 | 5
1 | 6
2 | 4
2 | 5
2 | 6
3 | 4
3 | 5
3 | 6
4 | 5
4 | 6
5 | 6
使用anchor member CTE启动的数据是:
who_acts| on_whom_influence
2 | 4
3 | 4
4 | 5
5 | 6
1 | 5
0 | 1
我可以使用SQL语法和递归选择进行此选择吗?我该怎么做?
答案 0 :(得分:2)
这听起来像是一个直截了当的CTE。您可以在单独的列中传递影响的根:
; with Influence as
(
select who_acts
, on_whom_influence
, who_acts as root
from dbo.YourTable
union all
select child.who_acts
, child.on_whom_influence
, parent.root
from Influence parent
join dbo.YourTable child
on parent.on_whom_influence = child.who_acts
)
select root
, on_whom_influence
from Influence
order by
root
, on_whom_influence