最近本人在做一個后台新增數據功能時,用到了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;