2021-05-21 Oracle Merge Into 更新表数据
2021/5/21 19:54:49
本文主要是介绍2021-05-21 Oracle Merge Into 更新表数据,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Merge into
使用版本: Oracle 9 及以上版本
作用:
在平常更新表数据时 有时候需要判断存在记录就更新数据,不存在则插入记录,我们需要先判断数据是否存在,需要两条sql, 现在使用merge into 就可以一条sql解决 更新数据和插入数据的问题了
语法
merge into t1 -- 要更新数据的目标表 using t2 -- 要用来更新目标表数据的源表 on (条件) -- 目标表与源表的查询结果 when matched then update set t1.column1=t2.column2 -- 表1中 存在符合条件的记录 更新语句t1表的字段 when not matched then insert t1(id,sc) values(t2.id,t2.sc) --表2中不存在符合条件的记录 执行插入操作 向t1表中插入操作
实际应用
存在学生成绩表
sc
(id
主键id,sid
学生编号,score
学生成绩)
学生成绩统计表sc_tj
(sid
学生编号,sum
成绩总和 )
现在需要将学生成绩表的每个学生的成绩综合 统计到成绩统计表, 现在统计表有的学生成绩是存在的,如果存在的学生记录就 将学生成绩表的成绩 加到原有记录中,如果没有的记录就插入数据
实现sql如下
merge into sc_tj t1 using (select sid,sum(score) score from sc group by sid ) t2 on(t1.sid=t2.sid) when matched then update set sum=t1.sum+t2.score when not matched then insert t1(sid,sum) values(t2.sid,t2.score)
注意事项:
用merge的时候大概有3个地方需要注意
- 如果using中的语句查询不出来数据,是不会执行insert方法的,因为这个语法是根据using 中的查询数据进行判断
2:语句写的时候on 中的条件记得过滤准确,不然可能会执行全表更新
3:on 中的条件不能是更新操作列,不然会报错:ora-38104
merge into sc_tj t1 using (select sid,sum(score) score from sc group by sid ) t2 on(t1.sid=t2.sid) when matched then update set sid='111' when not matched then insert t1(sid,sum) values(t2.sid,t2.score)
在匹配条件里用了sid 字段,就不能在更新操作时 进行修改sid字段
本文参考 https://www.jianshu.com/p/8f51ce60d9ba
如有侵权,请联系本人进行删除
这篇关于2021-05-21 Oracle Merge Into 更新表数据的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-06Package Easy(基于 NSIS 的打包exe安装包工具)使用方法-icode9专业技术文章分享
- 2024-06-06基于 casdoor 的 ELK 开源登录认证解决方案: elk-auth-casdoor-icode9专业技术文章分享
- 2024-05-29Elasticsearch慢查询日志配置
- 2024-05-29揭秘华为如此多成功项目的产品关键——Charter模板
- 2024-05-29海外IDC业务拓展的7大挑战
- 2024-05-29InLine Chat功能优化对标Github Copilot,CodeGeeX带来更高效、更直观的编程体验!
- 2024-05-29CodeGeeX 智能编程助手 6 项功能升级,在Visual Studio插件市场霸榜2周!
- 2024-05-29AutoMQ 生态集成 Apache Doris
- 2024-05-292024年IDC行业的深度挖掘:机遇、挑战与未来展望
- 2024-05-29五款扩展组件齐发 —— Volcano、Keda、Crane-scheduler 等,邀你体验