我有两个表,并尝试使用内部联接更新表1中的增量时间,但是我的以下查询遇到了问题。
UPDATE Table-1
SET Table-1.Time = DATEADD(minutes,,table-2.delta,table-1.time)
FROM Table-1
INNER JOIN Table-2 ON Table-1.TynameName = Table-2.Typename
AND Table1.Ordersequence >= table-2.ordersequence;
订单编号大于4(10分钟)的订单的时间将被更新为订单9,然后订单9的增量更新的时间将被更新,而5分钟以上的时间将被更新。
我的结果应该是大于4的订单号应更新(10分钟)直到12(订单顺序),大于9的订单号应更新(5分钟)直到12(订单顺序)
现在,我正在使用while循环来解决问题,方法是选择表2的每一行并更新表1的时间。
是否可以使用联接来实现?
用途cross apply
:
Update Table-1
set .Time= DATEADD(minutes, t2.delta, t1.time)
from [Table-1] t1 cross apply
(select top 1 t2.*
from [Table-2] t2
where t1.Typename = t2.Typename and
t1.Ordersequence >= t2.ordersequence
order by t2.ordersequence desc
) t2;
您遇到的问题是中有多行匹配Table-2
。在这种情况下,可以任意选择行之一进行更新。在cross apply
修复了这个问题,通过选择的第一行的比赛。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句