2016-08-20 82 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

沒有錯誤的預期結果應該是這樣的 –