1. 程式人生 > >MERGE--一個語句實現存在就更新,不存在就插入

MERGE--一個語句實現存在就更新,不存在就插入

使用MERGE語句從一個表中的選擇的行更新或插入到另一個表。是否更新或插入到目標表中的決定是基於在ON子句中的條件。它可以讓你避免多個INSERT和UPDATE DML語句。


語法為:
MERGE INTO table
USING data_source
ON (condition)
WHEN MATCHED THEN update_clause
WHEN NOT MATCHED THEN insert_clause;


案例:
比如現在有A、B兩個表
A
name sal
張三 4000
李四 5000
王五 5500

B
name sal
張三 5300
劉二 7000

現在有個需求,要將B表裡的資料更新到A表,如果A表存在的記錄就更新sal欄位,如果A表不存在的記錄就往裡插入。

如果用insert、update實現
insert into A
select * from B where B.name not in (select name from A);

update A
set A.sal = (select b.sal from B where B.Name = A.Name)
where A.Name in (select B.Name from B);


如果用MERGE實現
merge into A
using B
on (A.NAME = B.NAME)
when matched then
update
set A.SAL = B.Sal
when not matched then
insert (A.NAME,A.SAL)
values (B.Name,B.SAL);