sql - 如何使用 Merge 同步目标表
问题描述
如何使用 Merge 使表格同步。
我有两张桌子:Source
和Target
。我希望表在查询完成后Target
同步。Source
以下是两个表的列。我希望所有列都Contact_no
与Target
表同步。
最初我会将 3 列数据复制到Target
表 where 中Action = 'I'
。
源表
Unique_ID Part_no Country_Code Contact_no
1 123 IN 12121212
2 456 US 65467987
3 678 CH 65465465
4 897 EN 56546544
目标表
Unique_ID Part_no Country_Code Action
1 123 IN I
2 456 US I
3 678 CH I
4 897 EN I
SQL 运行后,它将Target
根据Source
表的Action
标志更新、插入或删除表。
次日源表已更改
Unique_ID Part_no Country_Code Contact_no
1 123 US 12121212 -- Updated Country_Code as "US"
2 456 US 65467987 -- No Change
3 678 CH 56565656 -- Deleted from Source
4 897 EN 56546544 -- No Change
5 114 DL 11111111 -- New Inserted
目标表
Unique_ID Part_no Country_Code Action
1 123 US U
2 456 US I
3 678 CH D -- Deleted from Source
4 897 EN I
5 114 DL I -- Newly Inserted
我在 Merge 语句下面写了,但它不能正常工作,在使用Action
标志“I”进行初始插入后,当我执行时,即使我只更新了Source
表中的一条记录,它也会更新所有动作标志为“U”的记录。
MERGE INTO Target d2
USING (SELECT Unique_id, Part_no, Country_code
FROM Source
UNION ALL
SELECT a.Unique_id, a.Part_no, a.Country_code
FROM Target a LEFT JOIN Source b ON a.Unique_id=b.Unique_id
WHERE b.Unique_id IS NULL
) d
ON (d2.Unique_id=d.Unique_id)
WHEN NOT MATCHED THEN
INSERT(Unique_id, Part_no, Country_code, Action)
VALUES(d.Unique_id, d.Part_no, d.Country_code, 'I')
WHEN MATCHED THEN
UPDATE SET d2.Action = 'U', d2.Country_code = d.Country_code;
-- DELETE WHERE d2.loc='DELETE ME';
请帮我解决这个问题。
解决方案
推荐阅读
- html - 无法隐藏带有 z-index 的链接
- python - PyQt5 / PySide2 代码只执行使用 ascii 字符的作品
- python - 生成一个由 N 个随机整数组成的数组,介于 1 和 K 之间,但每个数字至少包含一个
- javascript - 如何让图片交替闪烁
- objective-c - 从 XML 字典中提取数组
- php - 显示来自 Laravel 的 Ajax 响应的返回消息
- python - 打印一个 5 位数字,如果我们将 1 放在开头,则生成的 6 位数字比我们将 1 @ 放在数字末尾时小 3 倍
- javascript - 异步和等待在 javascript 中无法正常工作
- python - 独立于 Bokeh 服务器托管交互式 Bokeh 图
- linux - 名称开头带有连字符的文件