说我有两个表格,如下所示:
Table 1
ID Total
1 2
2 4
3 6
Table 2
OtherId Value
1 1
1 2
然后执行以下UPDATE / JOIN查询
update t1
set total = total + value
from Table1 as t1
INNER JOIN Table2 as t2
ON t1.ID = t2.OtherId
如何正确应用表2中的值?我看到两种可能的方式:
表1的记录1的Total
更新了两次,每次都考虑了前一次更新的值。因此,第一个Total
将设置为2 + 1 = 3
,然后新值将在下一个更新中使用:3 + 2 = 5
。因此最终值将为5
表1的记录1的Total
已被更新两次,但是它没有考虑到以前的更新-每次都从原始值开始。因此,第一个更新仍为2 + 1 = 3
,但第二个更新未考虑此新值,因此它将为2 + 2 = 4
我假设这是第一种方法,但是我找不到任何有关如何应用这些类型的更新的文档。谁能为我提供有关这种情况下JOIN UPDATES行为的详细信息?
答案 0 :(得分:0)
有趣的是,情况2 ...并且您不能保证哪个更新是“最终”结果,因为您无法在更新语句中指定顺序,并且SQL没有固有顺序。
declare @table1 table (id int, val int)
declare @table2 table (id int, val int)
insert into @table1
values (1,1)
insert into @table2
values (1,2),(1,3)
select *
from @table1 t1
join @table2 t2 on t1.id=t2.id
update t1 set val=t1.val+t2.val
from @table1 t1
join @table2 t2 on t1.id=t2.id
select *
from @table1