语法格式(不是所有数据库都通用):
MERGE INTO 目标表
USING (增量) 增量表
ON (匹配字段)
WHEN MATCHED THEN UPDATE SET
目标表.字段1=增量表.字段1,
...
目标表.字段n=增量表.字段n
WHEN NOT MATCHED THEN INSERT
(目标表.字段1,..目标表.字段n)
VALUES
(增量表.字段1,..增量表.字段n);
表DictA
| id1 | desc1 |
|---|---|
| 1001 | 基金 |
| 2001 | 保险 |
| 3001 | 证券 |
| 3002 | 信托 |
表DictB
| id1 | desc1 |
|---|---|
| 1002 | 证券 |
| 3001 | 银行 |
结果表
| id1 | desc1 |
|---|---|
| 1002 | 证券 |
| 3001 | 证券 |
| 1001 | 基金 |
| 2001 | 保险 |
| 3002 | 信托 |
根据dictA表的id,更新dictB的数据:
id同的更新,id没有的插入.
-- 关联上的更新
UPDATE dictB b SET desc1=(SELECT desc1 FROM dictA a WHERE a.id1=b.id1)
WHERE b.id1 IN (SELECT a.id1 FROM dictA a);
-- 关联不上的插入
INSERT INTO dictB(Id1, Desc1)
SELECT id1,desc1
FROM dictA a
WHERE a.id1 NOT IN (SELECT b.id1 FROM dictB b);
-------MERGE写法----------
MERGE INTO DictB b
USING (SELECT * FROM DictA) a
ON (a.id1=b.id1)
WHEN MATCHED THEN UPDATE SET --UPDATE和SET之间不需要加表名
b.desc1=a.desc1
WHEN NOT MATCHED THEN INSERT
(b.id1,b.desc1)
VALUES
(a.id1,a.desc1);
本文通过实例讲解如何使用SQL的MERGE INTO语句,针对DictA和DictB表进行更新和插入操作,确保数据同步。重点展示了如何根据id关联更新Desc1字段,以及对未关联记录的插入过程。
2098

被折叠的 条评论
为什么被折叠?



