繁体   English   中英

内部联接问题以在SQL Server 2008中更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM