当前位置: 移动技术网 > IT编程>数据库>Mysql > 存在时更新 不存在时新增:merge into using(071问题)

存在时更新 不存在时新增:merge into using(071问题)

2020年07月18日  | 移动技术网IT编程  | 我要评论

merge into using

在写数据同步的脚本时,常常会遇到这样的需求:
存在时 -> 更新,不存在时 -> 插入。

-- 源表 a
CREATE TABLE a
(
  id   NUMBER(3),
  name VARCHAR2(30),
  sex  VARCHAR2(2)
);

INSERT INTO a(ID, NAME, sex) VALUES(1, '小游子', '女');
INSERT INTO a(ID, NAME, sex) VALUES(2, '小优子', '男');
COMMIT;

-- 目标表 b, 空的
CREATE TABLE b AS SELECT * FROM a WHERE 1 = 2;

2 merge into 语句

merge 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入。
比单独的 update + insert的方式效率要更高,尤其是 on 条件下有唯一索引的时候,效率更高。

MERGE INTO 目标表 b
USING 源表 a
ON (b.字段1 = a.字段1 AND b.字段n = a.字段n) -- 必须带 ‘()’括号
WHEN MATCHED THEN -- 整体扫描,匹配时,执行此处
   UPDATE 子句
WHEN NOT MATCHED THEN -- 整体扫描,不匹配时,执行此处
   INSERT 子句;

实例: 将 源表 a 的数据同步至 b

MERGE INTO b
USING a
ON (b.id = a.id)
WHEN MATCHED THEN
   UPDATE SET b.name = a.name, b.sex = a.sex
WHEN NOT MATCHED THEN
   INSERT (b.id, b.name, b.sex) VALUES (a.id, a.name, a.sex);

本文地址:https://blog.csdn.net/u010074381/article/details/107392592

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网