2013-06-24 77 views
3

一個例子,我們可以考慮多個更新到同一行的必要性:SQL更新同一行多次

create table t (c1 int); 
insert into t (c1) values (1); 
insert into t (c1) values (2); 
insert into t (c1) values (3); 

update x1 
set x1.c1 = X2.new 
from t as x1 
inner join 
(
    select 1 as c1, 100 as new 
    union sel 1, 101 
    union sel 1, 102 
) as x2 on x1.c1 = x2.c1 

有3次到同一行潛在的更新。連接結果集具有相同行的3倍。這一行只訪問過一次嗎?如何計算最終價值?

+0

我在發佈查詢時遇到問題 - 出現錯誤。 – PAC

+0

我無法添加「union all ...」,因爲帖子返回錯誤... – PAC

+0

你得到了什麼錯誤? –

回答

3

從更新documentation

使用警告指定何時FROM子句以提供用於更新操作的標準。 UPDATE語句的結果是未定義的,如果語句包含一個未指定的FROM子句,那麼只有一個值可用於更新的每個列實例,即UPDATE語句不是確定性的。

在這種情況下結果是不確定的。最好將這些SQL語句視爲錯誤。