我有两个表,source
和target
。
source
:
+--------+------+-------------+
| Name | Year | City |
+--------+------+-------------+
| Toyota | 2002 | Los Angeles |
| Seat | 2012 | Madrid |
+--------+------+-------------+
target
:
+----+---------+------+----------+
| ID | Name | Year | City |
+----+---------+------+----------+
| 1 | Bentley | 1969 | Budapest |
| 2 | Toyota | 1988 | New York |
| 3 | Ford | 2001 | Tokyo |
| 4 | Seat | 1995 | Madrid |
| 5 | Bugatti | 1995 | London |
+----+---------+------+----------+
我想将source
合并到target
。我知道MERGE
命令,没关系。问题是source
没有列ID
,因此无法匹配。
由于两者中的Name
列都是唯一的,我只需要匹配它们是否相等,如果不存在则插入目标,如果存在更新目标。
我可以使用NOT EXIST
语句来完成它,但我们正在谈论数十亿行,因此MERGE将是一个更快的解决方案。
我可以以某种方式设置MERGE
命令,以便在匹配时仅考虑该列吗?
答案 0 :(得分:3)
是的,你可以:
MERGE target t
USING source s
ON t.name = s.name
WHEN NOT MATCHED
INSERT (Name, Year, City)
VALUES (s.Name, s.Year, s.City)
WHEN MATCHED THEN
UPDATE SET Year = s.Year,
City = s.City;
如果目标中的ID
列不是IDENTITY
列,您可以创建序列来填充它。