[英]Inner join issue to update in SQL Server 2008
我有两个表,并尝试使用内部联接使用表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的时间。
是否可以使用联接来实现?
似乎您有错误的sintax(更新没有from子句,并且必须在set之前指示表/连接)
Update Table-1
inner Join Table-2 on Table-1.TynameName=Table-2.Typename
and Table1.Ordersequence>=table-2.ordersequence
SET Table-1.Time= DATEADD(minutes,,table-2.delta,table-1.time)
where table-2.ordersequence != 9
;
使用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
通过选择匹配的第一行来解决此问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.