我们可以考虑对同一行进行多次更新的必要性的一个例子:
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 :(得分:4)
从更新documentation:
在指定FROM子句时要小心,以提供更新操作的条件。如果语句包含未以这样的方式指定的FROM子句,则UPDATE语句的结果是未定义的,即只有一个值可用于更新的每个列事件,即UPDATE语句不是确定性的。
在这种情况下,结果是不确定的。最好将这些SQL语句视为错误。