2016-08-20 48 views
0

我有两个表,并尝试使用内部连接更新表-1中的增量时间,但我面临的问题与我的下面的查询。在SQL Server 2008中更新的内部连接问题

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; 

的时间得到更新为仅ORDERNUMBER> 4(10分钟)订购9,以及用于顺序9和更高的(5分钟),然后增量更新。

我的结果应该是大于4的订单号应该更新(10分钟)直到12(订单序列),并且大于9应该更新(5分钟)直到12(订单序列)

现在我正在使用while循环来解决它,方法是选择table-2的每一行并更新table-1时间。

使用连接可以实现它吗?

enter image description here

回答

0

使用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通过选择匹配的第一行来解决此问题。

0

看来你错了sintax(更新并不需要from子句和表有/联接必须设置前所示)

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 
; 
+0

即使在使用相同的语法后,我得到了上述问题。 –

+0

错误在哪里? – scaisEdge

+0

没有错误的预期结果应该是这样的 –