最近本人在做一个后台新增数据功能时,用到了merge into函数,这里把碰到的一些自己理解进行一下总结,有什么不好的,不对的希望大家可以提出来。
merge into的形式:
MERGE INTO 表A USING 表B ON(a.a=b.b)
WHEN MATCHED THEN
更新数据
WHEN NOT MATCHED THEN
新增数据
该SQL语句功能是:
判断B表和A表是否满足ON中条件,如果满足则用B表去更新A表,如果不满足,则将B表数据插入A表但是有很多可选项,如下:
1.只update或者只insert
2.带条件的update或带条件的insert
3.全插入insert实现
4.带delete的update
接下来我们进行测试一下:
1、首先新建3张表,A、B、C
create table A
(
id NUMBER not null,
name NVARCHAR2(200) not null,
year NUMBER
);
create table B
(
id NUMBER not null,
aid NUMBER not null,
name NVARCHAR2(200) not null,
year NUMBER,
city NVARCHAR2(200)
);
create table C
(
id NUMBER not null,
name NVARCHAR2(200) not null,
city NVARCHAR2(200) not null
);
commit;
2、我们往表中导入数据:
insert into A values(1, ‘yangmi‘, 25);
insert into A values(2, ‘huge‘, 25);
insert into A values(3, ‘hejiong‘, 25);
commit;
insert into B values(1, 2, ‘arvin‘, 26, ‘广东‘);
insert into B values(2, 4, ‘tyler‘, 26, ‘广西‘);
insert into B values(3, 3, ‘alan‘, 40, ‘湖南‘);
commit;
3、然后我们使用merge into来更新数据
MERGE INTO A USING (select AID, NAME, YEAR from B) C ON (id = C.AID)
WHEN MATCHED THEN
UPDATE SET YEAR = C.YEAR
WHEN NOT MATCHED THEN
INSERT(ID, NAME, YEAR) VALUES(C.AID, C.NAME, C.YEAR);
commit;