使用JOIN的UPDATE如何处理多个记录?

时间:2018-12-17 15:55:18

标签: sql sql-server azure-sql-database

说我有两个表格,如下所示:

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的记录1的Total更新了两次,每次都考虑了前一次更新的值。因此,第一个Total将设置为2 + 1 = 3,然后新值将在下一个更新中使用:3 + 2 = 5。因此最终值将为5

  2. 表1的记录1的Total已被更新两次,但是它没有考虑到以前的更新-每次都从原始值开始。因此,第一个更新仍为2 + 1 = 3,但第二个更新未考虑此新值,因此它将为2 + 2 = 4

我假设这是第一种方法,但是我找不到任何有关如何应用这些类型的更新的文档。谁能为我提供有关这种情况下JOIN UPDATES行为的详细信息?

1 个答案:

答案 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

output