MERGE语法详解-程序员宅基地

技术标签: 数据库  

merge语法是根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入。

其基本语法规则是

merge into 目标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

when matched then update set a.更新字段=b.字段

when  not macthed then insert into a(字段1,字段2……)values(值1,值2……)

变种写法①,只更新:

merge into 目标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

when matched then update set a.更新字段=b.字段,a.更新字段2=b.字段2……

变种写法②,只插入:

merge into 目标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

when  not macthed then insert into a(字段1,字段2……)values(值1,值2……)

注:条件字段不可更新

对于Oracle来说,merge是9i新增的语法,在10g进行了一些增强,如下:

测试环境:Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

①条件操作:

merge into 目标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

when matched then update set a.更新字段=b.字段  where 限制条件

when  not macthed then insert into a(字段1,字段2……)values(值1,值2……) where 限制条件

举例:

merge into test_merge a
using test b
on(a.no=b.no)
when matched then update set a.no2=b.no2 where a.no<>1
when not matched then insert values(b.no,b.no2)  where a.no<>100

当然也支持变种①②的写法

②删除操作

merge into 目标表 a

using 源表 b

on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……)  

when matched then update set a.更新字段=b.字段

delete where b.字段=xxx

举例:

merge into test_merge a
using test b
on(a.no=b.no)
when matched then update set a.no2=b.no2 where a.no<>1
delete
where b.no=14

备注:删除动作针对的也是目标表,并且必须在语句最后

基本上merge的用法就是以上这些,建议平常可以多用,比单独的update+insert的方式效率要更高,尤其是on条件下有唯一索引的时候,效率更高

 

 



转载于:https://www.cnblogs.com/Yggdrasil/p/6562191.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/b124000/article/details/101661387

智能推荐

流量红利消退,汽车互联网该怎么玩?-程序员宅基地

文章浏览阅读807次。 互联网流量红利消退已是不争的事实,各大互联网巨头也“八仙过海各显神通”,寻找新的出路。前不久,京东与新浪达成涵盖入口、产品层面的战略合作,此前,它还与百度、网易、360..._电商app如何增加新用户

Qt 自定义透明QMenu菜单样式设置图标并添加边距偏移_qt 透明菜单-程序员宅基地

文章浏览阅读3.8k次,点赞8次,收藏30次。效果图添加菜单QMenu* m_pAudioMenu = new QMenu(m_pMeetingWindow);m_pAudioMenu->setProperty("class", "blackMenu");m_pAudioMenu->setWindowFlags(m_pAudioMenu->windowFlags() | Qt::FramelessWindowHint);m_pAudioMenu->setAttribute(Qt::WA_TranslucentBack_qt 透明菜单

Qualcomm QXDM工具简介和log抓取_qxdm log-程序员宅基地

文章浏览阅读1.6w次,点赞3次,收藏54次。原址高通工具简介QXDM 简介QXDM 安装QXDM 激活QXDM 使用AT打开Diagnostic口QXDM 配置1 Message View ConfigurationMessage PacketsLog PacketsLog PacketsOTAEvent ReportsStrings2 Log View Config3 QXDM-保存配置文件4 QXDM-导入配置文件QPST 端口配置QX..._qxdm log

uni-app踩坑之canvas 绘制后不显示不报错_uniapp canvas画不出线-程序员宅基地

文章浏览阅读7k次,点赞7次,收藏6次。先上代码<canvas canvas-id='share' id="share"></canvas>js 部分我在onLoad 里面这么写的// 初始化canvasvar ctx = uni.createCanvasContext('share');// 绘制ctx.drawImage(imgPath, 0, 0, 300, 500)ctx.fillText(tetx, 100, 100)// ......微信小程序端没毛病,正常显示,但是!APP 端没_uniapp canvas画不出线

React中setState不及时生效的解决方法_react setstate 慢一步-程序员宅基地

文章浏览阅读3.2k次,点赞3次,收藏6次。在你想更新state的地方,加一个setTimeout,setTimeout是同步的,带动state会立即更新,代码如下: setTimeout(() => { this.setState({ phone }) console.log(this.state.phone) }, 100);_react setstate 慢一步

星座运势sdk代码示例实现分享_星座sdk-程序员宅基地

文章浏览阅读2.2k次。运势查询也是一种大众化的娱乐方式,星座运势sdk方便查询十二星座的今日运势,下面分享的是今日或明日运势格式和本周或下周运势格式。接口名称:星座运势sdk接口平台:聚合数据接口地址:http://web.juhe.cn:8080/constellation/getAll支持格式:JSON请求方式:HTTP GET请求示例:http://web.juhe.cn:8080/con_星座sdk

随便推点

VUEJS文件扩展名esm.js和common.js是什么意思-程序员宅基地

文章浏览阅读1.9w次,点赞5次,收藏15次。转载:https://segmentfault.com/q/1010000011452736vue.js : vue.js则是直接用在&lt;script&gt;标签中的,完整版本,直接就可以通过script引用。vue.common.js :预编译调试时,CommonJS规范的格式,可以使用require("")引用的NODEJS格式。vue.esm.js:预编译调试时, EcmaScr..._esm.js

Unity3D-关于使用了Metal的Graphic闪退问题_unity 关闭metal api-程序员宅基地

文章浏览阅读2.9k次。最近看到CrashReport中经常看到因为GfxDeviceMetal::InvalidateState()这里闪退_unity 关闭metal api

sqlite错误 database disk image is malformed 可解决_runtime error: database disk image is malformed (1-程序员宅基地

文章浏览阅读1.9w次。在网上找了很多资料,很多网友都提到这个问题是不可解决的,面对这个问题,只能作罢。但我不甘心这么丢失数据,最最后找到了一个解决方法。经测试,原来数据,全部保住。以下为原文。http://www.sunnyu.com/?p=201 SQLite有一个很严重的缺点就是不提供Repair命令。导致死亡提示database disk image is malfor_runtime error: database disk image is malformed (11)

[机器学习]回归--Support Vector Regression(SVR)_svr的c-程序员宅基地

文章浏览阅读6w次,点赞47次,收藏347次。SVM分类,就是找到一个平面,让两个分类集合的支持向量或者所有的数据(LSSVM)离分类平面最远;SVR回归,就是找到一个回归平面,让一个集合的所有数据到该平面的距离最近。SVR是支持向量回归(support vector regression)的英文缩写,是支持向量机(SVM)的重要的应用分支。传统回归方法当且仅当回归f(x)完全等于y时才认为预测正确,如线性回归中常用(f(x..._svr的c

.net随笔-vb.net Accord.Net机器学习之贝叶斯分类_贝叶斯vb.net-程序员宅基地

文章浏览阅读817次。1、Accord.IO/ExcelReader.cs读取excel文件,源码如下:https://github.com/accord-net/framework/blob/792015d0e2ee250228dfafb99ea0e84d031a29ae/Sources/Accord.IO/ExcelReader.cs2、绘制数据Imports Accord.ControlsImports ..._贝叶斯vb.net

uniapp之h5反向代理设置踩坑,解决跨域问题_uniapp 反向代理-程序员宅基地

文章浏览阅读1.2w次,点赞7次,收藏15次。uniapp可以适应多个平台开发,你会发现在HBuilderX上的内置浏览器上调接口,没问题;在小程序中,也没问题;连接手机联调也没问题;但是用浏览器比如谷歌浏览器,你会发现接口调不通,报了一个错,就是跨域问题CORS。一般遇到这个问题,我们首先想到的是后台有没有进行设置允许跨域当后台设置允许跨域之后,前端h5需要进行设置反向代理才能解决这个问题。在manifest.json文件中..._uniapp 反向代理

推荐文章

热门文章

相关标签