在SQL中,添加一组在连接上对应的值

时间:2011-05-24 17:46:44

标签: sql sql-server merge insert

假设我有 Table_A 包含:

ID OldValue
3     16
1     5

Table_B 包含

ID Value OldValue
1    2     NULL
2    4     NULL 
3    8     NULL

并且我想将Table_A中的OldValues插入Table_B,其中ID相等,结果为:

更新了Table_B

ID Value OldValue
1    2     5
2    4     NULL 
3    8     16

在不使用游标的情况下是否有基于集合的方法?在现实生活中,这将是非常大的表格和游标,因为我们都知道很慢。也许某种合并?

我在SQL Server 2008上

5 个答案:

答案 0 :(得分:2)

Update Table_B
Set OldValue = A.OldValue
From Table_A As A
    Join Table_B As B
        On B.ID = A.ID

答案 1 :(得分:1)

您想要“更新自”

UPDATE B
SET B.OldValue = A.OldValue
FROM Table_B B
INNER JOIN Table_A  ON B.ID = A.ID

通常我把它写成一个选择,然后一旦我得到结果我将它转换为更新。

答案 2 :(得分:1)

简单:

update x set OldValue = a.OldValue
from Table_B x
join Table_A a on x.ID = a.ID

答案 3 :(得分:1)

使用联接:

UPDATE TABLE_B
SET OLDAVLUE=A.OLDVALUE
FROM TABLE_B B 
LEFT JOIN TABLE_A A ON B.ID=A.ID

答案 4 :(得分:1)

  

也许是某种合并?

事实上。以下是SQL Server 2008支持的标准SQL:

MERGE INTO Table_B
   USING Table_A
      ON Table_B.ID = Table_A.ID
WHEN MATCHED THEN
   UPDATE
      SET OldValue = Table_A.OldValue;