SQL server无限连接/联合?

时间:2017-03-12 23:08:56

标签: sql sql-server

我有两张这样的表

Activity | ActivityId
Skiing   |     1
Swimming |     2  
climbing |     3

就像这样(活动被活动取代)

ActivityId | ShouldBeReplacedWithActivityId
   1       |          2
   2       |          3

在这个例子中,当我从"活动替换为活动"中选择1时,我希望最终结果为3。表。这是因为我们从1开始,这个活动被2代替。但是两个也被3替换。

活动数量不受限制,活动取代了活动" 有没有办法在不使用存储过程/函数的情况下执行此操作?应该可以从这个查询创建一个视图。(因此,结果可以用于与其他数据的连接)

简化此示例以说明我需要帮助的内容。解决方案不应涉及创建新表/或更改数据结构,因为它必须与现有解决方案一起使用

1 个答案:

答案 0 :(得分:1)

您正在寻找递归CTE:

with cte as (
      select ShouldBeReplacedWithActivityId as activityId, 1 as lev
      from table2
      where activityId = 1
      union all
      select t.ShouldBeReplacedWithActivityId, cte.lev + 1
      from cte join
           table2 t
           on cte.activityId = t.activityId
     )
select top 1 cte.*
from cte
order by lev desc;

如果您有太多活动,则需要设置max recursion选项。您还需要注意活动中的周期。