0

今天是个好日子!我有一个图表。首先,我知道如何构建简单的递归选择。我在msdn上阅读了一些信息。

这是我的示例图
在此图像中,您可以看到(例如)图的顶部节点(编号为 0)影响节点编号 1(等 (2->4)、(3->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

我可以使用CTE 的锚成员获得的起始数据是:

who_acts| on_whom_influence 
2       | 4
3       | 4
4       | 5
5       | 6
1       | 5
0       | 1

我可以使用 SQL 语法和递归选择进行此选择吗?我该怎么做?

4

1 回答 1

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

SQL Fiddle 上的示例。

于 2013-05-10T15:49:04.457 回答