更新并连接多行,使用哪一行的值?

soo*_*ise 25 sql sql-server sql-server-2008-r2

假设我有以下语句,内连接产生3行,其中a.Id = b.Id,但3行中的每一行都有不同的b.Value.由于只更新了tableA中的一行,因此更新中使用了3个值中的哪一个?

UPDATE a
SET a.Value = b.Value
FROM tableA AS a
INNER JOIN tableB as b 
ON a.Id = b.Id
Run Code Online (Sandbox Code Playgroud)

And*_*mar 17

我不认为这个案例有规则,你不能依赖于特定的结果.

如果您在特定行之后,说出最新的行,您可以使用apply,例如:

UPDATE  a
SET     a.Value = b.Value
FROM    tableA AS a
CROSS APPLY
        (
        select  top 1 *
        from    tableB as b
        where   b.id = a.id
        order by
                DateColumn desc
        ) as b
Run Code Online (Sandbox Code Playgroud)


Jam*_*See 6

通常,您在此方案中最终得到的是按表上物理索引的顺序显示的第一行.在实际操作中,您应该将其视为非确定性的,并包含将结果缩小到一行的内容.

  • 当然,这是我现在学到的东西.在修复它之前,我只是想知道我的查询在做什么. (2认同)