在批量更新大量的資料時,使用insert 和update操作會出現效率低下,甚至卡死的情況。改用 merge into 代替執行批量更新,會提公升執行效率。
merge into將源資料(**於實際的表,檢視,子查詢)更新或插入到指定的表中(必須實際存在),好處是避免了多個insert 和update操作。
merge into是乙個目標性明確的操作符,不允許在乙個merge 語句中對相同的行insert或update操作。
這個語法僅需要一次全表掃瞄就完成了全部工作,執行效率要高於insert+update,尤其是在大資料量面前,效率越明顯。
語法如下:
merge into table_name alias1
using (table|view|sub_query) alias2
on (join condition)
when matched then
update
set col1 = col1_val1,
col2 = col2_val2
when not matched then
insert (column_list) values (column_values);
其中,table_name 指的是更新的表,using()裡邊的指的是資料**表/檢視/子查詢結果集,condition指的是連線條件。
如果滿足連線條件,則更新字段;如果連線條件不滿足,則停止更新進行插入。
table_a : 計畫金額表
table_b : 調整表
table_c : 調整金額表
想要根據調整id,將調整金額累加到計畫金額表中。一次更新當年12個月。
merge into table_a t1 using (
select
m.plan_id,
m.adjust_money + d.adjust_money adjust_money,
m.all_money + d.adjust_money all_money
from
table_a m
left join table_b a on m.card_id = a.card_id
left join table_c d on a.adjust_id = d.adjust_id
where
a.adjust_id = 5
and a.comp_code = '100101'
and m.year = d.year
) t2 on (t1.plan_id = t2.plan_id)
when matched then
update
set t1.adjust_money = t2.adjust_money,
t1.all_money = t2.all_money
merge into 語句使用者
merge into 語句 merge into target table a using source table sql b on conditional expression and when matched then update sql when not matched then inse...
sql函式 三 MERGE INTO函式
個人理解merge into函式是個邏輯擴充套件函式,類似if else函式 eg 修改a表記錄,匹配到a表的id與b表的aid相同的記錄,就更新a表的year欄位。沒匹配到的就將b表記錄插入到a表中。merge into a test a using select b.id,b.name,b.ye...
merge into的模板使用
1,建立兩測試表 create table merge test1 test1 id number,test1 name varchar2 100 create table merge test2 test2 id number,test2 name varchar2 100 2,測試表插入資料 i...