如何在SQL UPDATE行中只有差异

时间:2018-01-10 13:59:02

标签: sql sql-update

我有两个表DESTINATION和STAGING具有相同的结构和非常相似的数据。只有少数几行我才有所不同。例如: 在DESTINATION表中我有行:

ID, Name, ShortName
1, Name1, N1
2, Name2, N2
3, Name3, N3

在STAGING表中我有:

ID, Name, ShortName
1, Name1, N1
2, Name2, newN2
3, Name3, N3

如何仅使用ShortName列(newN2)中的新数据更新DESTINATION表第二行,并且对行没有任何区别而没有任何差异?

4 个答案:

答案 0 :(得分:0)

假设您正在使用SQL Server,您可以这样做:

update d
  set ShortName = s.ShortName
from destination d
join staging s
  on d.id = s.id
  and d.ShortName != s.ShortName;

SQLFiddle:http://sqlfiddle.com/#!6/0119c/1

答案 1 :(得分:0)

您可以像这样更新

  UPDATE A
  SET A.shortname = B.ShortName
  FROM DESTINATION A
       INNER JOIN STAGING B
       ON A.ID=B.ID
  AND A.shortname<>B.ShortName;

答案 2 :(得分:0)

尝试使用UPDATE ... FROM:

UPDATE Destination
SET ShortName = stg.ShortName
FROM Staging stg -- Reference "staging" table
WHERE Destination.ID = stg.ID 
AND Destination.ShortName <> stg.ShortName; -- Only update rows with "ShortName" values don't match

这将使用DESTINATION表格中的数据更新您的STAGING表格。这适用于Postgres。

http://www.sqlfiddle.com/#!17/ad370/1

答案 3 :(得分:0)

在MS SQL中,使用合并脚本是更新表的最佳方法。您可以查看多个列。

should be