update与merge基本语法规则、异同点、使用场景

UPDATE更新数据SQL
UPDATE /+append parallel(A,8) nologging/ CRSMAK.M_CM_GS_BILL_DISH_INFO A --票据贴现信息
SET A.YEAR_PAR_AMT =
(SELECT /parallel(B,8)/
YEAR_PAR_AMT
FROM (SELECT BIZ_ID, SUM(NVL(PAR_AMT, 0)) YEAR_PAR_AMT --年累计票面金额
FROM CRSMAK.M_CM_GS_BILL_DISH_INFO B --票据贴现信息
WHERE RPT_END_DT >= '20210101' --数据基准日期
AND RPT_END_DT <= '20210105' --数据基准日期
AND SUBJECT_ID = '131201' --科目编号
AND NVL(TODAY_ACCRUED_INT, 0) > 0 --当日应计利息
GROUP BY BIZ_ID) B
WHERE A.BIZ_ID = B.BIZ_ID
AND A.DISCNT_TYPE_CD = '2' --贴现类型代码 2-转贴现
AND A.RPT_END_DT = '20210106');
COMMIT;
--MERGE更新数据SQL
MERGE INTO CRSMAK.M_CM_GS_BILL_DISH_INFO A --票据贴现信息
USING (SELECT BIZ_ID, YEAR_PAR_AMT
FROM (SELECT BIZ_ID, SUM(NVL(PAR_AMT, 0)) YEAR_PAR_AMT --年累计票面金额
FROM CRSMAK.M_CM_GS_BILL_DISH_INFO B --票据贴现信息
WHERE RPT_END_DT >= '20210101' --数据基准日期
AND RPT_END_DT <= '20210105' --数据基准日期
AND SUBJECT_ID = '131201' --科目编号
AND NVL(TODAY_ACCRUED_INT, 0) > 0 --当日应计利息
GROUP BY BIZ_ID)) B
ON (A.BIZ_ID = B.BIZ_ID AND A.DISCNT_TYPE_CD = '2' AND A.RPT_END_DT = '20210106')
WHEN MATCHED THEN
UPDATE SET A.YEAR_PAR_AMT = B.YEAR_PAR_AMT;
COMMIT;

一、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 MATCHED THEN INSERT INTO a(字段1,字段2…) VALUES(值1,值2…)

二、UPDATE与MERGE异同点:
一、共同点:都可以做更新操作
二、不同点:
1、update语句更新需要根据索引或者数据列遍历所有行
2、merge只需要遍历一次表,可以更新可以插入
3、修改一条已有的数据:使用update的时候不管出现什么情况都会去修改(即覆盖原有数据),而merge会去查询原有数据,如果一样的话,不会取修改,只有出现不同的内容的时候才会取修改。
4、MERGE 还有个特点:当修改的数据ID找不到的时候,update会报错,而merge却会把数据新建id存入数据库。
5、MERGE可以同时做插入(NOT MATCHED的时候)
6、MERGE不会强制要求不被更新的表具有唯一或者主键约束
例如:MERGE a USING b ON (…)这里不会要求B具有唯一约束或者主键约束。当然肯定还是要求b表只能返回一条记录。
很多UPADTE语句调整为等效语句的时候会遇到这张强制约束的问题,但merge不存在。
7、在某些情况下,MERGE效率更高。
这是因为写法导致的,并不是说merge本身比update高效。例如很多对应SQL不是很精通的人员可能会这样写一个。

三、适用场景:
一、update适用于:
1、更改单表速度快稳定性好
2、某字段即是过滤条件优势更新字段,且该字段有选择性很强的索引时“UPDATE A SET STATUS=1 WHERE ID=1 AND STATUS =2 AND IDC IN (表)”
二、MERGE适用于:
1、根据一张表或多张表联合查询的连接条件对另一张表进行查询,连接条件匹配上的进行update,无法匹配的执行insert可以直接用merge实现,执行效率要高于insert+UPDATE
2、“UPDATE A SET i=(SELECT i FROM b WHERE a.id=b.id) WHERE NOT EXISTS (SELECT 1 FROM b WHERE a.id=b.id)”NOT exists部分需要额外消耗,可以用merge避免。
MERGE缺点:
1、不支持更改字段放入on(会报错 ora-38104:无法更新on子句中引用的列:XX)
2、有些情况merge过滤条件不放入on可能会有其他性能问题(例子2、3)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/145387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

存钱虚拟计划,嘚

存钱计划—虚拟 2024年 (第一年) 1月 2月 3月 4月 5月 6 月 7月 8月 9月 10月 11月 12月 1w 1w 1w 1w 1w 1w 1w 1w 1w 1w 1w 1w 2025年(第二年) 1w1w*102.5% A 懒得写A代替 A A A A A A A A A A 2026年(第三年) (1w1w*10…

Centos7.9用rancher来快速部署K8S

什么是 Rancher&#xff1f; Rancher 是一个 Kubernetes 管理工具&#xff0c;让你能在任何地方和任何提供商上部署和运行集群。 Rancher 可以创建来自 Kubernetes 托管服务提供商的集群&#xff0c;创建节点并安装 Kubernetes&#xff0c;或者导入在任何地方运行的现有 Kube…

React路由跳转但是页面未发生改变,刷新后正常显示

react项目&#xff0c;配置好路由后&#xff0c;触发跳转发现url已经改变但页面内容未改变&#xff0c;刷新后才能正常显示。 发现是被react的严格模式影响&#xff0c;将BrwserRouter放到其外层即可 const root ReactDOM.createRoot(document.getElementById("root&qu…

OpenCV入门5——OpenCV的算术与位运算

文章目录 图像的加法运算图像的减法运算图像的乘除运算图像的融合OpenCV位运算-非操作OpenCV位操作-与运算OpenCV位操作-或与异或为图像添加水印 图像的加法运算 # -*- coding: utf-8 -*- import cv2 import numpy as npimg cv2.imread(E://pic//4.jpg)# 图的加法运算就是矩阵…

EasyCVR视频监控+AI智能分析网关如何助力木材厂安全生产?

旭帆科技有很多工厂的视频监管方案&#xff0c;小编也经常分享出来供大家参考。近期&#xff0c;又有伙伴后台私信我们想要关于木材厂的方案。针对木材厂的生产过程与特性以及安全风险等&#xff0c;我们来分享一下相关的监管方案&#xff1a; 1&#xff09;温湿度监测&#xf…

技巧篇:Mac 环境PyCharm 配置 python Anaconda

Mac 中 PyCharm 配置 python Anaconda环境 在 python 开发中我们最常用的IDE就是PyCharm&#xff0c;有关PyCharm的优点这里就不在赘述。在项目开发中我们经常用到许多第三方库&#xff0c;用的最多的命令就是pip install 第三方库名 进行安装。现在你可以使用一个工具来帮你解…

three.js相机调用reset方法复原但无法完全复原

目录 一、问题 二、原因 三、总结 一、问题 需求&#xff1a;经过多次旋转、平移等变换后&#xff0c;希望恢复到初次渲染的角度、位置。结果发现&#xff1a; three.js oribtControls调用 一次reset方法 无法完全复原;需要多次调用后才能复原。 this.orbitControls.reset…

前端开发学习 (一) 搭建Vue基础环境

一、环境搭建 1、安装nodejs #下载地址 https://nodejs.org/dist/v20.9.0/node-v20.9.0-x64.msi 2、配置环境变量 上面下载完安装包后自行安装&#xff0c;安装完成后安装下图操作添加环境变量 #查看版本 node --version v20.9.0# npm --version 10.1.03、配置npm加速源 np…

2.c++基础语法

文章目录 1.c 程序结构关键字标识符、操作符、标点预处理指令注释main 主函数命名空间 2.c 变量和常量变量 3.c 数组和容器4.c 程序流程5.c字符和字符串 1.c 程序结构 关键字 关键字事程序保留的&#xff0c;程序员不能使用&#xff0c;c的常见关键字如下图&#xff1a; 标识…

机器人导航+OPENCV透视变换示例代码

透视变换又称四点变换&#xff0c;所以不能用于5边形这样的图形变换&#xff0c;不是真正的透视变换&#xff0c;但是这个方法可以把机器人看到的图像转换为俯视图&#xff0c;这样就可以建立地图&#xff0c;要不然怎么建立地图呢。 void CrelaxMyFriendDlg::OnBnClickedOk()…

Python如何调用ixchariot进行吞吐量测试

Python如何调用ixchariot进行吞吐量测试 要使用Python调用IxChariot进行吞吐量测试&#xff0c;您可以使用 subprocess 模块来执行IxChariot的TCL命令行。下面是一个简单的示例代码&#xff1a; import subprocess# 定义IxChariot的安装路径和测试脚本路径 ixchariot_path &q…

Ubuntu 18.04无网络连接的n种可能办法

文章目录 网络图标消失&#xff0c;Ubuntu无网络连接VMware上Ubuntu18.04&#xff0c;桥接了多个网卡&#xff0c;其中一个用来上网&#xff0c;均设置为静态ip网络桥接链路没有接对路由不对 网络图标消失&#xff0c;Ubuntu无网络连接 sudo service network-manager stop sud…

增删改查mysql

查询 -- 查询表结果-- 查看 当前数据库下的表show tables;-- 查看指定的表desc tb_emp; -- td_emp 是表名-- 查看 数据库的见表语句show create table tb_emp; 修改 -- 修改表结构 -- 修改 为表 tb_emp 添加字段 qq varchar(11) alter table tb_emp add qq varchar(11) …

【LeetCode刷题-滑动窗口】--340.至多包含K个不同字符的最长子串

340.至多包含K个不同字符的最长子串 class Solution {public int lengthOfLongestSubstringKDistinct(String s, int k) {int len s.length();if(len < k){return len;}//滑动窗口的左右指针int left 0,right 0;//定义一个哈希映射HashMap<Character,Integer> hash…

2023-11-18 mysql-sysbench压测TPS/QPS-记录

摘要: 2023-11-18 mysql-sysbench压测TPS/QPS sysbench压测TPS/QPS 使用 sysbench 压测 TPS/QPS 的基础测试数据是 6 张表,每张表写入 10 万行数据,然后在此基础测试数据上分别进行 300 秒的混合写、更新、删除压测。 sysbench --mysql-host=192.168.41.xxx --mysql-port=3…

java中的深度复制和浅复制的BUG

刷题刷到LeetCode回溯DFS的算法题39题的时候,碰见一个Arraylist里面的bug,其中dfs函数里面的第一个if判断里面的语句 paths.add(path); path.clear();其中path是添加了path,但是添加之后path.clear(),导致原来添加到paths的path置为空数组,因为ArrayList的add只是把一个引用指…

使用Postman进行压力测试

1.打开Postman新建测试接口 2.点击右边保存&#xff0c;选择一个文件集合&#xff0c;如果没有就创建&#xff0c;然后保存 就是这个东西&#xff0c;这里不便展示出来&#xff0c;压力测试需要在文件夹里面进行 3.选择要测试的接口&#xff0c;iterations 表示请求发起次数&a…

基于Vue+SpringBoot的大学计算机课程管理平台 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 实验课程档案模块2.2 实验资源模块2.3 学生实验模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 实验课程档案表3.2.2 实验资源表3.2.3 学生实验表 四、系统展示五、核心代码5.1 一键生成实验5.2 提交实验5.3 批阅实…

金蝶云星空签出元数据提示“数据中心业务对象版本高于应用版本”

文章目录 数据中心业务对象版本高于应用版本签出元数据提示建议 数据中心业务对象版本高于应用版本 签出元数据提示 建议 每次签出元数据前&#xff0c;先获取最新的代码后再签出&#xff0c;如果还是提示&#xff0c;那就根据你的情况选择版本。