MERGE--一個語句實現存在就更新,不存在就插入
阿新 • • 發佈:2019-02-17
使用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);