目录
第三步 使用merge into函数从B表中向A表中更新数据
第二部分 使用MySQL实现Oracle的merge into函数
第三步 使用on duplicate key实现Oracle的merge into函数
最近正好遇到将Oracle的merge into函数用MySQL的方式表示出来,但是在MySQL中是没有merge into函数的,因此写下这篇博客,记录一下,希望能够帮助到你们。
第一部分 使用Oracle的merge into函数
第一步 建表
-- A_MERGE
create table A_MERGE
(
ID NUMBER not null
constraint "A_MERGE_pk"
primary key,
NAME VARCHAR2(50),
AGE NUMBER
);
-- B_MERGE
create table B_MERGE
(
ID NUMBER not null
constraint "B_MERGE_pk"
primary key,
NAME VARCHAR2(50),
AGE NUMBER
);
commit;
第二步 插入数据
-- A_MERGE
INSERT INTO A_MERGE (ID, NAME, AGE) VALUES (1, '张三', 18);
INSERT INTO A_MERGE (ID, NAME, AGE) VALUES (2, '李四', 19);
INSERT INTO A_MERGE (ID, NAME, AGE) VALUES (3, '王五', 20);
commit;
-- B_MERGE
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (1, '张三', 18);
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (2, '李4', 18);
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (4, 'Mike', 20);
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (5, 'John', 21);
commit;
得到的数据如下图所示:
A_MERGE:
B_MERGE:
第三步 使用merge into函数从B表中向A表中更新数据
merge into A_MERGE a
using (select B_MERGE.ID, B_MERGE.NAME, B_MERGE.AGE
from B_MERGE) c
on (a.ID = c.ID)
when matched then
update
set a.NAME=c.NAME,
a.AGE=c.AGE
when not matched then
insert (ID, NAME, AGE)
values (c.ID, c.NAME, c.AGE);
commit;
运行merge into函数得到的A_MERGE表,如下图所示:
第二部分 使用MySQL实现Oracle的merge into函数
第一步 建表
-- a_merge
create table a_merge
(
id int not null
primary key,
name varchar(50) null,
age int null
);
-- b_merge
create table b_merge
(
id int not null
primary key,
name varchar(50) null,
age int null
);
第二步 插入数据
-- A_MERGE
INSERT INTO A_MERGE (ID, NAME, AGE) VALUES (1, '张三', 18);
INSERT INTO A_MERGE (ID, NAME, AGE) VALUES (2, '李四', 19);
INSERT INTO A_MERGE (ID, NAME, AGE) VALUES (3, '王五', 20);
commit;
-- B_MERGE
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (1, '张三', 18);
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (2, '李4', 18);
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (4, 'Mike', 20);
INSERT INTO B_MERGE (ID, NAME, AGE) VALUES (5, 'John', 21);
commit;
第三步 使用on duplicate key实现Oracle的merge into函数
insert into a_merge(id, name, age)
select id, name, age
from b_merge b
on duplicate key update name=b.name,
age=b.age;
运行后的a_merge表中的数据:
最后:
假如生活欺骗了你,不要忧郁,也不要愤慨,相信吧,快乐之日就会到来。