SQL語句merge into的用法

2021-10-08 11:38:30 字數 1426 閱讀 7472

在批量更新大量的資料時,使用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...