用MySQL实现Oracle的merge into函数

目录

第一部分 使用Oracle的merge into函数

第一步 建表

第二步 插入数据

第三步 使用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表中的数据:

最后:

假如生活欺骗了你,不要忧郁,也不要愤慨,相信吧,快乐之日就会到来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值