SQL之merge into(转)

【存储过程】Merge Into语句实现Insert/Update在Oracle中的应用   最近接到一个新的接口需求,开发一个保存数据的接口,需要完成如下功能:有一个表T,有两个字段a(主键),b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录。   在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下: if exists(select... 阅读详情

来自:http://www.cnblogs.com/lenxu/archive/2012/02/14/2350922.html

http://www.cnblogs.com/CareySon/archive/2012/03/07/2383690.html

简介

    Merge关键字是一个神奇的DML关键字。它在SQL Server 2008被引入,它能将Insert,Update,Delete简单的并为一句。MSDN对于Merge的解释非常的短小精悍:”根据与源表联接的结果,对目标表执行插入、更新或删除操作。例如,根据在另一个表中找到的差异在一个表中插入、更新或删除行,可以对两个表进行同步。”,通过这个描述,我们可以看出Merge是关于对于两个表之间的数据进行操作的。

    可以想象出,需要使用Merge的场景比如:

  •     数据同步
  •     数据转换
  •     基于源表对目标表做Insert,Update,Delete操作

 

使用Merge关键字的好处

    首先是更加短小精悍的语句,在SQL Server 2008之前没有Merge的时代,基于源表对目标表进行操作需要分别写好几条Insert,Update,Delete。而使用Merge,仅仅需要使用一条语句就好。下面我们来看一个例子。

    首先建立源表和目标表,并插入相关的数据,如图1所示。

  1

     图1.创建测试表并插入测试数据

   

    下面我们来写一个简单的Merge语句,如图2所示。

     2

     图2.一个简单的Merge语句

  

     所造成的结果如图3所示。

     3

     图3.Merge语句对于目标表的更新

 

     最终目标表的结果如图4所示。

     4

     图4.最后目标表的结果

 

    Merge语句还有一个强大的功能是通过OUTPUT子句,可以将刚刚做过变动的数据进行输出。我们在上面的Merge语句后加入OUTPUT子句,如图5所示。

    5

    图5.Merge语句后加上OUTPUT子句

 

   此时Merge操作完成后,将所变动的语句进行输出,如图6所示。

   6

   图6.输出Merge操作产生的数据变更

 

   当然了,上面的Merge关键字后面使用了多个WHEN…THEN语句,而这个语句是可选的.也可以仅仅新增或是仅仅删除,如图7所示。

   7

    图7.仅仅插入的Merge语句

 

   我们还可以使用TOP关键字限制目标表被操作的行,如图8所示。在图2的语句基础上加上了TOP关键字,我们看到只有两行被更新。

   8

    图8.使用TOP关键字的Merge语句

 

    但仅仅是MATCHED这种限制条件往往不能满足实际需求,我们可以在图7那个语句的基础上加上AND附加上额外的限制条件,如图9所示。

    9

    图9.加上了AND限制条件的Merge语句

 

Merge关键字的一些限制

  •     使用Merge关键字只能更新一个表
  •     源表中不能有重复的记录

【SQL高级知识】MERGE INTO语句 假设我们有两个表格,一个是"users"表格,包含了用户的ID、姓名和地址信息;另一个是"users_updates"表格,包含了用户的ID和更新后的地址信息。我们想要使用MERGE INTO语句将"users_updates"表格中的地址信息合并到"users"表格中。如以上示例所示,MERGE INTO语句可以根据指定的条件将两个表格中的数据进行合并和更新,非常方便实用。 阅读详情

相关推荐

保姆级教程:在若依3.8.6前后端分离版中,手动引入达梦DM8驱动并成功打包

本文详细介绍了在若依3.8.6前后端分离版中手动引入达梦DM8驱动并成功打包的全流程。从驱动获取、Maven依赖配置到数据源设置和SQL语法适配,提供了保姆级教程,帮助开发者顺利完成国产数据库迁移。特别针对SpringBoot项目与达梦数据库的整合难点,给出了实用解决方案和性能优化建议。

weixin_30847865的博客 329

SQL语句merge into的用法

应用场景 在批量更新大量的数据时,使用Insert 和Update操作会出现效率低下,甚至卡死的情况。改用 MERGE INTO 代替执行批量更新,会提升执行效率。 merge into将源数据(来源于实际的表,视图,子查询)更新或插入到指定的表中(必须实际存在),好处是避免了多个insert 和update操作。 merge into是一个目标性明确的操作符,不允许在一个merge 语句中对相同的行insert或update操作。 这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于insert+u

王浩的技术博客 2万+

oracle提高merge更新效率,使用Merge INTO优化SQL,性能提升巨大

说说背景:开发有个需求,需要对新加的一个字段根据特定的业务逻辑更新数据。TPS_TRADE表数据有4000多万,TPS_EXTERNAL_REF表3600多万,TPS_ACCOUNT表8200多万。开发的SQL如下:UPDATE TPS_TRADE aSET a.OPEN_LOT_QTY =(SELECT a.trade_qty - nvl(sum(c.TRADE_QTY),0)FROM TPS_...

weixin_39520988的博客 4425

merge into 语法的简单用法及示例

是一种用于在数据库表中执行插入、更新和删除操作的SQL语句。它通常用于根据条件来确定应该执行何种操作,以确保目标表中的数据与源数据同步。这个SQL语句将确保目标表中的数据与源表同步,执行更新和删除操作以匹配源数据。:当源表中没有匹配的记录时执行的操作,这里是删除操作,删除目标表中的记录。当你想在一个SQL语句中同时执行删除和更新操作时,使用。:当条件匹配时执行的操作,这里是更新操作,将目标表的。,我们要合并这两个表的数据,同时进行更新和删除操作。:定义用于匹配目标表和源表的条件,这里是。

林夕 9824

mybatis 动态sql merge into

<insert id="mergeInfo" parameterType="xxx.xxx.xxx"> merge into table1 t1 <trim prefix="using ( select " suffix=" from dual ) t2" suffixOverrides=","> <if test="VC_ORG_ID != null>...

weixin_37562241的博客 1120

数据湖(十六):Structured Streaming实时写入Iceberg

文章目录Structured Streaming实时写入Iceberg一、创建Kafka topic二、编写向Kafka生产数据代码三、编写Structured Streaming读取Kafka数据实时写入Iceberg四、查看Iceberg中数据结果目前Spark中Structured Streaming只支持实时向Iceberg中写入数据,不支持实时从Iceberg中读取数据,下面案例我们将使用Structured Streaming从Kafka中实时读取数据,然后将结果实时写入到Iceberg中。启动

Lansonli(蓝深李)的博客 1688

merge into优化sql(转)

使用Merge INTO优化SQL,性能提升巨大   分类: Oracle 2017-04-13 10:55:07   说说背景:开发有个需求,需要对新加的一个字段根据特定的业务逻辑更新数据。TPS_TRADE表数据有4000多万,TPS_EXTERNAL_REF表3600多万,TPS_ACCOUNT表8200多万。开发的SQL如下:UPDATE TPS_TRADE a SET ...

weixin_33853794的博客 1098

mysql-connector-net-6.8.3-noinstall.zip 使用指南:.NET 连 MySQL 的免安装方案

ADO.NET 是 .NET 平台访问数据库的基础技术,通过数据库驱动实现应用程序与数据库之间的通信。在 .NET Framework 项目中,MySQL 官方提供的 MySql.Data.dll 是连接 MySQL 的核心组件。mysql-connector-net-6.8.3-noinstall.zip 作为免安装驱动包,解压即用,无需注册 GAC 或写注册表,特别适合离线部署和版本锁定场景。它解决了老项目在无法运行安装程序的环境下连接 MySQL 的难题,广泛应用于遗留 ASP.NET WebForm

weixin_34326179的博客 428

[转] Merge into的使用详解-你Merge了没有

Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表...

weixin_30659829的博客 74

Halcon窗体开发避坑指南:C#自定义控件实现7大图像交互功能

本文详细介绍了如何利用C#封装自定义Halcon控件,以解决原生HWindowControl功能不足的问题。通过实战代码,展示了如何实现图像按比例显示、鼠标拖动缩放、灰度值读取、图像保存、截图及图形叠加等七大核心交互功能,并重点剖析了内存管理、坐标转换等开发避坑要点,帮助开发者构建稳定可复用的机器视觉组件库。

weixin_29251131的博客 292

跟着团子学SAP EPPM:项目管理常见的集成场景(PPM\PS\MS Project)

在SAP的EPPM解决方案中,针对企业战略级别的投资组合管理首先是定义合适的投资组合的层级结构,在投资组合下可以通过不同维度去定义投资篮(Portofolio Bucket)进行层层拆分,在最下层级的投资篮下可以分配明细的投资项(Portofolio Item),投资项可以是独立的一个一个具体执行的项目,也可以是单纯的一次服务等等。 今天主要聚焦在投资项的维度展开讲一下在SAP中投资项常见的几种集成模式: 集成场景1:使用PPM中的Project Management进行项目管理 第一个场景是在创建投资项

Lucas1211的博客 4139

Merge into用法总结

简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据。   有一个表T,有两个字段a、b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在T中插入一条记录。在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下:   if exists(select 1 from T where ......

Nemo的笔记本 32万+

C#上位机实战:手把手搭智慧工业数字孪生系统,从设备建模到实时联动全落地

字段长度(字节)说明起始标识2固定为0xAA55,用于判断数据包开始设备ID4唯一标识设备(比如1001代表电机1)数据类型10=布尔(启停),1=浮点数(转速/温度)数据长度4数据字节数(布尔1字节,浮点数4字节)数据内容N实际数据(按数据长度读取)校验位1前面所有字节的异或校验,防止数据篡改结束标识2固定为0x55AA,用于判断数据包结束。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 968

oracle中merge into语句详解

merge into 语句是insert 与update语句的结合,可以同时实现update和insert的功能。 一、merge into语句的语法。 MERGE INTO schema. table alias USING { schema. table | views | query} alias ON {(condition) } WHEN MATCHED THEN   UPD

naomi_qing的博客 5万+

NEU-DET 冷轧钢缺陷检测:基于 YOLOv8 的目标检测与可视化 UI 实现

冷轧钢的生产过程中,由于设备故障、工艺问题或者人为因素,钢板表面可能会出现多种缺陷,如划痕、裂纹、孔洞等,这些缺陷会严重影响钢材的质量。它比之前的版本(如 YOLOv5、YOLOv4)在速度和精度上都有显著提升,并且对硬件要求较低,适合进行工业界面和嵌入式系统的应用。这些版本相较于更大型的模型(如 YOLOv8x)具有更快的推理速度和较低的资源占用,适合工业生产线中的实时应用。通过将训练好的模型部署到工业生产线摄像头中,我们可以实现实时的缺陷检测,极大地提升生产效率和产品质量。

YOLO 737

【视频监控国标GB/T28181】无人机的视频图传技术

然而,随着无人机市场的不断发展和无人机视频图传技术的迅速进步,一些厂家正积极探索更多的传输方式。如今,一些大疆无人机已经具备了4G辅助图传功能,这意味着它们需要在无人机上安装相应的SIM卡,并在有移动互联网信号的情况下,通过互联网进行视频图传。这种技术的应用,不仅提高了无人机的操作灵活性,也使得无人机在各个领域的应用更加广泛。在使用时,用户需时刻注意无人机的飞行距离。在无人机图传系统中,OFDM技术的运用更是如虎添翼,显著增强了视频传输的品质与稳定性,尤其在错综复杂的电磁环境中,更能凸显其不可替代的优势。

开源物联网项目商业化作者 5662

SQL学习之MERGE INTO关键字

MERGE是一个 DML 关键字,它能将 INSERT,UPDATE,DELETE 等操作并为一句,根据与源表联接的结果,对目标表执行插入、更新或删除操作。MERGE 是一个 DML 关键字,它能将 INSERT,UPDATE,DELETE 等操作并为一句,根据与源表联接的结果,对目标表执行插入、更新或删除操作。MERGE的语法MERGE 的用法merge 无法多次更新同一行,也无法更新和删除同一行当源表和目标表不匹配时:1 若数据是源表有目标表没有,则进行插入操作;

weixin_41029325的博客 1477

【学习系列】SAP RAP 7:行为定义-Draft

本文介绍了RAP框架中的草稿表(Draft)功能及其应用。草稿表允许用户临时保存数据,在激活前不影响业务逻辑,支持保存继续、暂存和设备切换功能。草稿分为独占草稿(仅限同一用户编辑)和协作草稿(允许多用户协同编辑)。启用草稿需在行为定义和投影中包含标准action,并创建包含TotalETag等管理字段的草稿表。TotalETag确保草稿转换时活动数据未被修改,而ETagmaster则防止并发修改。文章通过OData调用示例详细说明了ETag验证过程,强调草稿功能由RAP框架自动处理,开发者只需关注定义和配置

DeveloperMrMeng的博客 442

oracle中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 [INSERT sql]作用:判断B表和A表是否满足ON中条件,

刘伟的博客 19万+

麒麟v10系统安装

麒麟v10系统安装

喜文BLOG 1万+

(王道408考研操作系统)第一章计算机系统概述-第三节2:中断和异常

注意!!! 本节内容和《计算机组成原理》中的中断有重合,如果需要详细了解的话可以点击链接跳转:(计算机组成原理)第七章输入和输出系统-第四节2:I/O方式之程序中断方式 为了内容完整,部分内容会借用上述文章 文章目录一:中断和异常的基本概念(1)中断和异常的定义 一:中断和异常的基本概念 在操作系统引入核心态和用户态这两种工作状态后,就需要考虑两种状态之间是如何切换的。 操作系统内核工作在核心态,用户程序工作在用户态,系统不允许用户程序使用核心态的功能,但是用户程序为了完成某些操作又必须使用这些功能

快乐江湖的博客 3531

Replace into与Merge into的用法总结

MySQL中replace用法总结 插入一条数据,存在则不操作,不存在就插入(必须现有唯一键) 使用insert ignore语句: insert ignore into table(col1,col2) values ('a','b'); 这样一来,如果表中已经存在的数据,就不会插入,如果没有就会插入一条新数据。 插入一条数据,存在就更新,不存在就插入(必须现有唯一键) 这种有两种操作...

夜空中最亮的星 6923

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

上一篇: js 正则获得微博 MID
下一篇: 使用时间戳+merge 进行两个表之间的同步
ArvinStudy
博客等级 码龄15年 83粉丝 193原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值