语法格式(不是所有数据库都通用):
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);