SQL语句merge into的用法
在批量更新大量的数据时,使用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
分类:
.netcore学习
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!