merge into

物联网技术-第2章-物联网技术架构 • 物联网具有很强的异构性• 为实现异构设备之间的互联、互通与互操作,物联网需要以一个开放的分层的可扩展的为框架。 阅读详情

在开发中我们经常会碰到这么一个场景,列如用户修改简单的个人基本信息,这个时候就需要判断用户的基本信息是否存在,如果是首次录入不存在就在表中插入一条信息,如果存在就更新表里的信息。
要实现这种这种场景很简单,我们最常用的就是先查询一下用户的基本信息,执行一下select方法,如果数据存在就执行update方法,如果不存在就就执行insert 方法。这是一种解决思路。
当只是很简单的条件判断时,我们也有另外一种数据库层面的解决思路就是merge into ,很多数据库都有这种语句,因为我用的oracle,这里就记录下oracle的用法,从version 9开始就支持的语法。

首先我们有一张表这里随便抽取的一张平时练习的表

在这里插入图片描述

这里先说下Merge into的语法,merge into中文大概意思就是合并操作

MERGE INTO table_name alias1
USING (table | view | sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
  UPDATE table_name SET col1 = col_val1, col2 = col2_val
WHEN NOT MATCHED THEN
  INSERT (column_list) VALUES (column_values);

这个语句很好理解,操作alias1表的数据,其操作数据的来源为 alias2中数据的记录数,通过on括号中的条件进行过滤,当alias1和alias2中的数据通过on条件进行过滤后,如果存在就执行更新操作,如果不存在就执行插入操作。

现在有这么个需求:判断表中是否存在ID为7的数据,如果存在更新名字为小小明,如果不存在,插入一条小明的数据。
假设场景中名字为唯一,那么我们的更新语句就可以这么写

merge into student a
using (select '7' as id from dual) s
on (a.id = s.id)
when matched then
  update set a.student_name = '小明二号'
when not matched then
  insert (id, student_name, fk_class) values ('7', '小明', '2')

用merge的时候大概有3个地方需要注意

1:如果using中的语句查询不出来数据,是不会执行insert方法的,因为这个语法是根据using 中的查询数据进行判断

merge into student a
using (select id  from student where id = '7') s
on (a.id = s.id )
when matched then
  update set a.student_name = '小明二号'
when not matched then
  insert (id, student_name, fk_class) values ('7', '小明', '2')

这么写的话是不会有插入操作的,因为表中并没有id为7的数据,如果把id 改为6,因为表中有查询出的数据能成功执行update
2:语句写的时候on 中的条件记得过滤准确,不然可能会执行全表更新

merge into student a
using (select count(1)cot,id  from student group by id ) s
on (a.id = s.id and cot > 0)
when matched then
  update set a.student_name = '小明二号'
when not matched then
  insert (id, student_name, fk_class) values ('7', '小明', '2')

这么写的话可以看出明显的错误,只要是id相等且cot大于0,那么查询出的都大于0,会执行全表更新

3:on 中的条件不能是更新操作列,不然会报错:ora-38104

merge into student a
using (select '7' as id from dual) s
on (a.id = s.id)
when matched then
  update set a.id = '7'
when not matched then
  insert (id, student_name, fk_class) values ('7', '小明', '2');

在这里插入图片描述

作者:TryCatch菌
链接:https://www.jianshu.com/p/8f51ce60d9ba
来源:简书

【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】 正常情况下,一个NIC的实现,可以包含一百多个master和几十个slave,每个master和每个slave都会有一些寄存器,这些寄存器可以被 programming,实际实践中就会对 AMIB 或者 ASIB 或者 IB,当它需要具有 programming的时候,给它指定一个node number。为什么指定Node Number呢?首先,从CPU的角度,它需要有一个1M对齐的地址空间,在这1M地址空间上,对每个ASIB或者AMIB这样的接口给它一个node number以后, 阅读详情

相关推荐

Kylin系统离线环境下的dpkg依赖包高效部署指南

本文详细介绍了在Kylin系统离线环境下高效部署dpkg依赖包的完整方案,包括预下载依赖包、构建本地APT仓库以及高级故障排查技巧。通过实战经验和优化建议,帮助用户解决依赖地狱问题,提升部署效率,特别适用于银河麒麟V10等内网环境。

weixin_29051245的博客 389

merge into 操作同一张表

merge into主要是用于处理两张表大数据量的处理 ,相对效率高一点,项目中遇到一个对于同一张表处理的 如果表A中存在这条记录就更新这条记录 ,如果不存在这条记录 就插入新的记录 网上找了很多 基本都有问题,自己尝试写了一个 测试通过了。 MERGE INTO A t1 USING ( select count(*) c from A t2 where t2.key='key1' )x ON (x.c > 0) when matched then update s

初学者 2376

Avalonia 项目结构说明

Avalonia UI

bjxingch的博客 1273

merge into 对同一张表进行更新和插入

Merge into是Oracle 9i引入的功能 问题来源:在插入表中数据时,需要检查这个表中是否已经存在这条数据,如果有则进行更新,如果没有则进行插入。 那么问题来了,都有哪些方式可以实现: 1.用简单的办法: ①先查询 select count(1) from dual where XXX; ②在进行插入或者更新 2.用sql server中的一个办法 if exists(s...

醉梦洛的博客 5246

当KCF遇见卡尔曼滤波:视觉跟随算法的动态优化实战

本文探讨了KCF算法与卡尔曼滤波在视觉跟随算法中的动态优化实践,通过深度融合策略提升目标跟踪的鲁棒性和实时性。特别针对机器人应用场景,详细解析了在Jetson等嵌入式平台上的优化技巧,包括计算图优化、内存访问优化和多线程流水线设计,实现了30FPS@1080p的稳定跟踪性能。

sugar的博客 957

NCBI Datasets CLI优化:解决基因组数据下载报错与速度问题

基因组数据下载是生物信息学分析的关键环节,其稳定性和效率直接影响研究进度。NCBI Datasets CLI作为官方命令行工具,常面临连接中断和下载速度慢两大痛点,这主要源于服务器连接限制和网络传输问题。通过自动重试机制和校验修复流程可提升稳定性,而连接复用与CDN加速等技术能显著提高下载效率。在植物基因组等大规模数据场景中,结合脱水模式和增量更新策略可减少70%传输量。本文以艾草基因组项目为例,展示如何通过并行下载和API优化将100个基因组的下载时间从18小时缩短至2小时,为生物信息学研究提供可靠的数据

weixin_29051245的博客 244

oracle merge into 的用法详解+实例

<br />oracle merge into 的用法详解+实例 <br />作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表; <br /><br />  1、建设银行:6227  0000  1068  0039  973  户名:郭永苏 <br />     开户行:北京海淀支行 <br /><br /><br />语法: <br /><br />MERGE INTO [your table-name] [rename your table here] <br

IT人生 1万+

通过EMIF接口实现FPGA与DSP的高速连接(方法)

请注意,具体的连接细节和步骤可能会根据所使用的FPGA和DSP型号以及特定的应用需求而有所不同。开发DSP和FPGA上的软件,以实现数据交换和处理。根据系统的具体需求,对FPGA和DSP的接口逻辑进行优化,以减少延迟、提高数据吞吐量或降低资源消耗。它通常支持多种类型的存储器,如SRAM、DRAM、ROM等,以及通过特定的接口与FPGA连接。对于FPGA,需要编程来实现与DSP的接口逻辑,包括地址译码、数据传输、时序控制等。在连接完成后,进行详细的调试和测试,以确保数据能够在DSP和FPGA之间正确传输。

AigcFox的博客 4590

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万+

Unity3D用c#脚本调用前端javascript函数:H5获取unity - webgl 加载并初始化完成的消息

unity3d发布的Webgl 可以作为静态文件加载到H5页面中,并通过javascript 调用unity内置的C#脚本函数,详见Webgl调用unity api。而往往我们需要知道Webgl ready的消息,本文将给出unity 内部调用javascript函数的方案加以解决。

Bravo 2477

《广告核心指标驱动的AI投放系统:从数据洞察到智能决策的全链路优化》

本方案通过构建广告核心指标驱动的AI投放系统,实现从数据采集到智能决策的全链路自动化。

专注Java领域与微服务架构,热爱人工智能与深度学习 1069

Sqlserver、oracle中Merge的使用方法,一个merge语句搞定多个Insert,Update,Delete操作

Sqlserver、oracle中Merge的使用方法,一个merge语句搞定多个Insert,Update,Delete操作

lusklusklusk的博客 6387

杰理 JL701N/JL703N USB MIDI 使用教程

摘要:本教程介绍如何在杰理JL701N/JL703N音箱的可视化SDK中配置USB MIDI功能。主要步骤包括:1)启用PC模式;2)修改SDK宏定义启用USB MIDI;3)实现MIDI数据接收处理逻辑;4)调用接口发送MIDI数据;5)使用MIDI-OX测试功能。针对低版本SDK可能出现的设备识别问题,提供了在midi.c文件中添加特定代码行的解决方案。使用前需确保SDK版本达标,并注意备份原始文件。

qq_42014563的博客 1269

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万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

merge into 的用法

1. 语法 merge into 的语法如下所示: MERGE INTO [target-table] T USING [source-table sql] S ON([conditional expression] and [...]...) WHEN MATCHED THEN [UPDATE sql] WHEN NOT MATCHED THEN [INSERT sql] 判断源表 S 和目标表 T 是否满足 ON 中的条件,如果满足则用 S 表去更新 T 表,如果不满足,则将 S 表数据插入

一个懒鬼的博客 5万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

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万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

mysql实现merge into的方法

mysql实现merge into的方法 merge into语法 merge语法: 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] 初始化数据 #实例:–oracle与mysql数据初始化 create table PR

weixin_39259170的博客 3万+

oracle中merge into 与update的性能对比

oracle中merge into 与update 性能对比起由updatemerge into测试结果对比:merge语句的语法官方的例子:后记 起由 现在有一个表WX_USER_Test,一个Excel。业务要求excel中的两列插入到表中,数据量为11522 条。 项目经理让我把sql写了给他,因为是生产数据的更新,大家都比较慎重。(跨年夜动了三万条数据,涉及三个系统,但仅仅是查询,不足为奇)。 我非常自信,先创建了临时表WX_USER_TMP,将excel中的数据插入,然后使用update批量更新语

xunboang0059的博客 1万+

merge into 的使用

关于 merge into (oracle) 本人使用的是oracle数据库。对于merge into 的主要功能就是合并 insert into 以及update。如果存在即update、不存在 insert into。 具体使用 merge into 做添加也做修改 merge into 目标表 A using 源表 B on(A.条件1 = B.条件1 ) --可多个条件 and连...

weixin_45531737的博客 3834

Oracle中merge into用法解析

Oracle中merge into用法解析

qq_45967480的博客 4754

MERGE INTO语法

转自:http://blog.youkuaiyun.com/yuzhic/article/details/1896878   动机: 想在Oracle中用一条SQL语句直接进行Insert/Update的操作。 说明: 在进行SQL语句编写时,我们经常会遇到大量的同时进行Insert/Update的语句 ,也就是说当存在记录时,就更新(Update),不存在数据时,就插入(Insert)。 实

Jane 8767

Replace into与Merge into的用法总结

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

夜空中最亮的星 6923

MySQL四种方法实现merge into

exists和in都有过滤功能,他俩最大的差别就是in引导的子句只能对一个字段进行限制,比如对id字段进行限定但是如果我们想对多个字段进行限制,使用in就不合适了,例如不过很可惜,上面的语句只能再DB2上执行,SQL Server不行此时就可以使用exists 来对多个字段进行限制了。

web_15534274656的博客 4087
上一篇: rank() over(partition by)记录
下一篇: connect by 用法
普通网友
博客等级 码龄6年 137粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值