我有两张这样的表
Activity | ActivityId
Skiing | 1
Swimming | 2
climbing | 3
就像这样(活动被活动取代)
ActivityId | ShouldBeReplacedWithActivityId
1 | 2
2 | 3
在这个例子中,当我从"活动替换为活动"中选择1时,我希望最终结果为3。表。这是因为我们从1开始,这个活动被2代替。但是两个也被3替换。
活动数量不受限制,活动取代了活动" 有没有办法在不使用存储过程/函数的情况下执行此操作?应该可以从这个查询创建一个视图。(因此,结果可以用于与其他数据的连接)
简化此示例以说明我需要帮助的内容。解决方案不应涉及创建新表/或更改数据结构,因为它必须与现有解决方案一起使用
答案 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选项。您还需要注意活动中的周期。