应用场景

在批量更新大量的数据时,使用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 (SELECTm.plan_id,m.adjust_money + d.adjust_money adjust_money,m.all_money + d.adjust_money all_moneyFROMtable_a mLEFT JOIN table_b a ON m.card_id = a.card_idLEFT JOIN table_c d ON a.adjust_id = d.adjust_idWHEREa.adjust_id = 5AND a.comp_code = '100101'AND m.year = d.year
) t2 ON (t1.plan_id = t2.plan_id)
WHEN matched THENUPDATE
SET t1.adjust_money = t2.adjust_money,t1.all_money = t2.all_money

SQL语句merge into的用法相关推荐

  1. IsNull 和 SQL语句中CASE WHEN用法

    [转]IsNull 和 SQL语句中CASE WHEN用法收藏   [转]IsNull 和 SQL语句中CASE WHEN用法 1.ISNULL     使用指定的替换值替换   NULL.      ...

  2. sql语句中的in用法示例_PHP中的循环语句和示例

    sql语句中的in用法示例 循环 (Loops) Imagine that we need a program that says "hello world" 100 times. ...

  3. sql语句中的in用法示例_示例中JavaScript in操作符

    sql语句中的in用法示例 One of the first topics you'll come across when learning JavaScript (or any other prog ...

  4. mysql语句中limt_mysql sql语句中的limit用法

    mysql sql语句中的limit用法 1.select * from tablename limit 100,15 从100条记录后开始(不包括第100条记录)取出15条记录 (实际取出的是第 1 ...

  5. sql语句中的limit用法

    sql语句中的limit用法 limit 用于限制查询结果返回. 用法: limit a,b 其中a表示查询数据的起始位置,b表示返回的数量. (MySQL数据库中的记录是从0开始的) 举例: SEL ...

  6. SQL语句中JOIN的用法

    记录:257 写SQL最高境界:SELECT * FROM 表名.当然这是一句自嘲.探究一下SQL语句中JOIN的用法,直到经历这个场景,变得想验证一下究竟. 一.场景 把关系型数据库A中表TEST_ ...

  7. SQL语句中EXISTS的用法

    记录:258 在业务开展中,会遇到类似需求. 需求1:UPDATE表TEST_TB01中的记录:满足条件:这些记录不在TEST_TB02中. 需求2:UPDATE表TEST_TB01中的记录:满足条件 ...

  8. sql 语句NVL()用法

    sql 语句NVL()用法 一NVL函数是一个空值转换函数 NVL(表达式1,表达式2) 如果表达式1为空值,NVL返回值为表达式2的值,否则返回表达式1的值. 该函数的目的是把一个空值(null)转 ...

  9. SQL语句中Cast的用法

    GPS平台.网站建设.软件开发.系统运维,找森大网络科技! https://cnsendnet.taobao.com 来自森大科技官方博客 http://www.cnsendblog.com/inde ...

最新文章

  1. Handler造成Activity泄漏,用弱引用真的有用么?
  2. 九度oj 1006 ZOJ问题 2010年浙江大学计算机及软件工程研究生机试真题
  3. 著名软件公司的java笔试算法题!(含参考答案)
  4. c语言程序设计现代方法第二版 第10章程序设计题3题,自己编写的一个程序
  5. 计算机应用基础专科,2019年自考《计算机应用基础》专科模拟试题及答案
  6. BenchmarkDotNet v0.12x新增功能
  7. android volley设置编码,Volley 概览  |  Android 开发者  |  Android Developers
  8. html科学计算器,html+css+js实现科学计算器
  9. python房屋租赁系统的设计与实现_基于ssh的房屋租赁系统的设计与实现(含源文件)...
  10. vscode 软件 git提交代码步骤(结合webstorm软件)
  11. 电子商务概论(农)之形考作业三
  12. Excel应用技巧之二——常用函数
  13. 计算机领域论文 网站,各类论文网站大全
  14. mysql中表结构是什么_查询MySQL数据库中表结构
  15. 移动硬盘突然断电导致坏道产生
  16. win7空文件夹删不掉的原因及解决方法
  17. CRM SaaS是什么?
  18. 5月Github上最热门的数据科学和机器学习项目TOP5
  19. arcgis取消投影_ArcGIS中的投影问题
  20. Android设置应用数字角标

热门文章

  1. 511遇见易语言乐玩插件FindMultiColor找色多点及找色块
  2. 1.2、通过WiFi模块连接手机控制小灯的亮灭(AT指令)
  3. 谈下微软企业生产力大学的Sharepoint Service 2010 的3天培训
  4. #1135 : Magic Box(枚举)
  5. 微博数据采集API 附咨询公司微博大数据分析实例
  6. 反馈线性化类有哪些最新发表的毕业论文呢?
  7. 生物安全实验室P1、P2、P3、P4等级的区别
  8. windows10配置Docker容器独立IP地址互相通信
  9. Python引用pymssql模块打包报错的解决方法
  10. 如何批量生成食品商品条码