SQL中merge into用法詳解
從備份表中更新字段到正式表中,使用 UPDATE 批量更新大量的數(shù)據(jù),會(huì)出現(xiàn)效率低下,有時(shí)候甚至卡死的情況,后面通過(guò)使用 MERGE INTO 代替 UPDATE 執(zhí)行批量更新,會(huì)提升執(zhí)行效率。
MERGE INTO語(yǔ)法如下:
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()里邊的指的是數(shù)據(jù)來(lái)源表/視圖/子查詢(xún)結(jié)果集,condition指的是連接條件,如果滿(mǎn)足連接條件,set 字段1=值1,字段2=值2...
如果連接條件不滿(mǎn)足,則停止更新進(jìn)行插入。
下面我們來(lái)舉例說(shuō)明:
先創(chuàng)建被更新表merge_target,并往其中插入一條數(shù)據(jù)用來(lái)更新;
再創(chuàng)建更新表merge_source,用來(lái)向被更新表插入數(shù)據(jù);
下面準(zhǔn)備merge into腳本:
MERGE INTO merge_target target USING (SELECT B.name,B.age,B.target_id FROM merge_source B) source ON (target.id=source.target_id) WHEN MATCHED THEN UPDATE SET target.name = source.name, target.age = source.age WHEN NOT MATCHED THEN INSERT(target.name,target.age) VALUES (source.name,source.age);
結(jié)果如下:
另:MySql不支持merge into 語(yǔ)法。
相關(guān)文章
Sql學(xué)習(xí)第一天——SQL 練習(xí)題(建表/sql語(yǔ)句)
來(lái)自Madrid且訂單數(shù)少于3的消費(fèi)者,針對(duì)這個(gè)要求作出以下:建表 做題分析以及sql語(yǔ)句的寫(xiě)法,感興趣的朋友可以參考下哈,希望可以幫助到你2013-03-03sqlserver獲取當(dāng)前日期的最大時(shí)間值
如果你有看到這篇,會(huì)看到Insus.NET在SQL Server2008使用最簡(jiǎn)單的方法取到午夜時(shí)間值。2011-09-09教你編寫(xiě)SQLMap的Tamper腳本過(guò)狗
安全狗其實(shí)是比較好繞的WAF,繞過(guò)方法很多,但這里我們就用一種:注釋混淆,這篇文章主要介紹了教你編寫(xiě)SQLMap的Tamper腳本過(guò)狗,需要的朋友可以參考下2023-02-02SQL語(yǔ)句練習(xí)實(shí)例之四 找出促銷(xiāo)活動(dòng)中銷(xiāo)售額最高的職員
你剛在一家服裝銷(xiāo)售公司中找到了一份工作,此時(shí)經(jīng)理要求你根據(jù)數(shù)據(jù)庫(kù)中的兩張表得到促銷(xiāo)活動(dòng)銷(xiāo)售額最高的銷(xiāo)售員2011-10-10真正高效的SQLSERVER分頁(yè)查詢(xún)(多種方案)
Sqlserver數(shù)據(jù)庫(kù)分頁(yè)查詢(xún)一直是Sqlserver的短板,分頁(yè)查詢(xún)每頁(yè)30條,查詢(xún)第1500頁(yè)(即第45001-45030條數(shù)據(jù))進(jìn)行測(cè)試,分析出最高效的查詢(xún),感興趣的朋友可以參考下哈2013-04-04sqlserver2005 行列轉(zhuǎn)換實(shí)現(xiàn)方法
sqlserver2005 行列轉(zhuǎn)換實(shí)現(xiàn)方法,需要的朋友可以參考下。2009-10-10