当前位置: 首页 > news >正文

Oracle:merge into用法

文章目录

  • merge into
  • 使用场景
  • merge into语法
  • 测试表
    • 普通模式
  • merge使用注意点

merge into

MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入
比单独的 update + insert 的方式效率要更高,尤其是on条件下有唯一索引的时候,效率更高。

使用场景

在写数据同步的脚本时,常常会遇到这样的需求:存在时更新,不存在时插入

merge into语法

MERGE INTO [target-table] T  --目标表 可以用别名
USING [source-table] S  --数据源表 可以是表、视图、子查询
ON([conditional expression] )  --关联条件
WHEN MATCHED THEN --当关联条件成立时 更新、删除,插入的where部分为可选 
UPDATE [target-table] SET T.column = S.column WHERE 限制条件
DELETE [target-table] WHERE 限制条件
WHEN NOT MATCHED THEN --当关联条件不成立时   
INSERT (column,...) VALUES('',...)

判断源表 S 和目标表 T 是否满足 ON 中的条件,如果满足则用 S 表去更新 T 表,如果不满足,则将 S 表数据插入 T 表中。但是有很多可选项,如下:

  • 普通模式
  • 只 update 或者只 insert
  • 无条件 insert 实现
  • 带 delete 的 update

测试表

-- 目标表
CREATE TABLE target ( ID NUMBER NOT NULL, NAME VARCHAR2 ( 12 ) NOT NULL, YEAR NUMBER 
);
-- 源表
CREATE TABLE source (ID NUMBER NOT NULL,AID NUMBER NOT NULL,NAME VARCHAR2 ( 12 ) NOT NULL,YEAR NUMBER,CITY VARCHAR2 ( 12 ) 
);
-- 插入测试数据
INSERT INTO target
VALUES( 1, 'liuwei', 20 );
INSERT INTO target
VALUES( 2, 'zhangbin', 21 );
INSERT INTO target
VALUES( 3, 'fuguo', 20 );
INSERT INTO source
VALUES( 1, 2, 'zhangbin', 30, '吉林' );
INSERT INTO source
VALUES( 2, 4, 'yihe', 33, '黑龙江' );
INSERT INTO source
VALUES( 3, 3, 'fuguo', '', '山东' );

普通模式

merge使用注意点

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

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

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 thenupdate set a.student_name = '小明二号'
when not matched theninsert (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 thenupdate set a.id = '7'
when not matched theninsert (id, student_name, fk_class) values ('7', '小明', '2');

参考:
https://blog.csdn.net/weixin_44657888/article/details/124591434

https://www.jianshu.com/p/8f51ce60d9ba

相关文章:

Oracle:merge into用法

文章目录 merge into使用场景merge into语法测试表普通模式 merge使用注意点 merge into MERGE 是 Oracle9i 新增的语法,根据源表对目标表进行匹配查询,匹配成功时更新,不成功时插入 比单独的 update insert 的方式效率要更高,尤…...

【数据结构OJ题】消失的数字

原题链接:https://leetcode.cn/problems/missing-number-lcci/ 目录 1. 题目描述 2. 思路分析 3.代码实现 1. 题目描述 2. 思路分析 方法一:排序遍历(下一个数不等于上一个数1,这个下一个数就是消失的数字)。 时…...

linux 隔离内核

1、 编辑grub gedit /etc/default/grub 2、修改 GRUB_CMDLINE_LINUX_DEFAULT"quiet splash isolcpus1,3"(这里表示1和3两个cpu被隔离,cpu序号从0开始) or GRUB_CMDLINE_LINUX"isolcpus1,3" 3、update sudo update-grub 4、查看…...

IO学习-有名管道

1,要求实现AB进程对话 A进程先发送一句话给B进程,B进程接收后打印 B进程再回复一句话给A进程,A进程接收后打印 重复1.2步骤,当收到quit后,要结束AB进程 运行结果:...

小研究 - 基于 SpringBoot 微服务架构下前后端分离的 MVVM 模型(三)

本文主要以SpringBoot微服务架构为基础,提出了前后端分离的MVVM模型,并对其进行了详细的分析以及研究,以此为相关领域的工作人员提供一定的技术性参考。 目录 6 互联网应用开发架构分析 6.1 微服务架构与单体架构 6.1.1 系统更改部署 6.1…...

应用在多媒体手机中的低功率立体声编解码器

多媒体手机一般是指可以录制或播放视频的手机。多媒体的定义是多种媒体的综合,一般是图像、文字、声音等多种结合,所以多媒体手机是可以处理和使用图像文字声音相结合的移动设备。目前流行的多媒体概念,主要是指文字、图形、图像、声音等多种…...

Teams Room视频会议室方案

需求背景: 适合在40平米的会议室参加Teams视频会议,会议桌周围可以坐20人,要求: 1,操作简单,一键入会Teams Room; 2,任何人带上自己的笔记本电脑,可以分享电脑画面&#…...

C# 委托、事件、特性程序

委托和事件 public partial class Form1 : Form { public Form1() { InitializeComponent(); Man man new Man("小明"); Roommate[] roommates { new Roommate("小张"), new Roommate("小朱"), …...

MapTR论文笔记

MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 目的 传统高精地图 通过一些离线的基于 SLAM 的方法生成,需要复杂的流程以及高昂的维护费用。基于 bev 分割的建图方法,缺少向量化 实例级的信息,比如…...

JS进阶-Day4

🥔:流水不争先争滔滔不绝 JS进阶-Day1——点击此处(作用域、函数、解构赋值等) JS进阶-Day2——点击此处(深入对象之构造函数、实例成员、静态成员等;内置构造函数之引用类型、包装类型等) JS进…...

【C语言】初阶完结练习题

🎈个人主页:库库的里昂 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:C语言初阶 ✨其他专栏:代码小游戏 🤝希望作者的文章能对你有所帮助,有不足的地方请在评论…...

c++类与对象详解

c类与对象详解 对象类方法自定义类型类的特性this类的六个默认成员函数static成员友元内部类 对象 在C中&#xff0c;对象是类的实例。定义对象的语法为&#xff1a; <class_name> object_name;其中&#xff0c;class_name 是定义类时指定的类名&#xff0c;object_nam…...

I/O 函数/缓存和字节流、占位符、getchar(),putchar()

I/O 函数 C 语言提供了一些函数&#xff0c;用于与外部设备通信&#xff0c;称为输入输出函数&#xff0c;简称 I/O 函数。输入&#xff08;import&#xff09;指的是获取外部数据&#xff0c;输出&#xff08;export&#xff09;指的是向外部传递数据。 缓存和字节流 严格地…...

MySQL日期常见的函数

-- 获取当天日期 -- 2023-06-20 select curdate();-- 获取当天年月日时分秒 select now();-- 日期运算 -- 2024-06-20 17:04:17 select date_add(now(),interval 1 year);-- 日期比较 -- 0 select datediff(now(),now());-- 日期MySQL对于日期类型数据如何查询 -- 获取指定日期…...

Python获取CPU温度

本文的主要目的是演示如何借助 Python 中的 pythonnet 库读取和显示 CPU 温度。 Python获取CPU温度 根据您正在设计的应用程序类型&#xff0c;您可能希望监视运行该程序的机器的资源。 由于多种原因&#xff0c;可能会出现这种情况。 也许您需要您的程序在系统资源达到特定阈…...

后端整理(MySql)

1 事务 1.1 事务ACID原则 原子性&#xff08;Atomicity&#xff09; 事务的原子性指的是事务的操作&#xff0c;要么全部成功&#xff0c;要么全部失败回滚 一致性&#xff08;Consistency&#xff09; 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…...

HashSet的详细介绍

一、HashSet整体介绍 HashSet 是 Java 中的一个集合类&#xff0c;它实现了 Set 接口&#xff0c;用于存储不重复的元素。它是基于哈希表的数据结构实现的。 HashSet 的特点如下&#xff1a; 不允许存储重复的元素&#xff1a;HashSet 中的元素是唯一的&#xff0c;如果尝试…...

【SCI征稿】JCR1区,中科院2区,有关大数据、人工智能、机器学习的应用研究均可

期刊简介&#xff1a; 【出版社】Elsevier 【影响因子】IF&#xff08;2022&#xff09;&#xff1a;6.5-7.0 【期刊分区】JCR1区&#xff0c;中科院2区 【检索情况】SCIE 在检&#xff0c;正刊 【参考周期】期刊部系统内提交&#xff0c;预计3-5个月左右录用&#xff0c;…...

【UE】AI导航,多个导航物体无法走到同一终点问题

如不需要开启导航物体的碰撞&#xff0c;则需要关闭Use RVOAvoidance 不然会导致多个导航物体无法到达同一个目标点&#xff0c;都在附近晃。无法结束寻路。 ue小白&#xff0c;判定导航终点的半径&#xff0c;没有找到。如果有大佬知道怎么设置请在评论区指出&#xff0c;谢…...

途游游戏 x 极狐GitLab “通关” DevOps :单元测试从无到优,覆盖率 0→80%

目录 4 个工具孤岛 → 极狐GitLab 全家桶&#xff0c; 被动的「人找进度」 → 高效的「进度找人」 把 Code Review 做扎实 代码质量「向左移」&#xff0c;修复成本「往下降」 从无到「优」 自动执行单元测试&#xff0c;覆盖率 0→80% 你喜欢玩游戏吗&#xff1f; 最近…...

第7章 运算符-7.7 身份运算符

在Python中&#xff0c;身份运算符用于比较两个变量的内存地址引用是否相同。表7-7中列出了Python中的身份运算符, 在该表中&#xff0c;假设变量a的值为3&#xff0c;变量b的值为3。表7-7 身份运算符运算符描述实例is如果两个变量的内存地址引用相同&#xff0c;则返回True&am…...

HiFloat8高效训推技术报告(2):HiFloat8高效低比特推理

1. 低比特推理背景知识深度学习模型在训练和推理阶段通常使用 FP32 (32位浮点数) 或 BF16/FP16 (16位浮点数) 格式。然而&#xff0c;随着模型规模的不断增大&#xff08;尤其是大型语言模型 LLM&#xff09;&#xff0c;对计算效率、显存占用和能耗的要求也越来越高。低比特推…...

SLIC超像素分割实战:从原理到OpenCV代码实现(附完整示例)

SLIC超像素分割实战&#xff1a;从原理到OpenCV代码实现&#xff08;附完整示例&#xff09; 在计算机视觉领域&#xff0c;图像分割一直是个基础而关键的课题。想象一下&#xff0c;当你需要让计算机理解一张照片时&#xff0c;直接处理数百万个像素显然效率太低——这就好比…...

告别重复操作:MaaYuan让《代号鸢》游戏管理效率提升80%

告别重复操作&#xff1a;MaaYuan让《代号鸢》游戏管理效率提升80% 【免费下载链接】MaaYuan 代号鸢 / 如鸢 一键长草小助手 项目地址: https://gitcode.com/gh_mirrors/ma/MaaYuan 您是否每天花费1小时以上在《代号鸢》或《如鸢》中完成重复日常任务&#xff1f;MaaYua…...

从67到89:我是如何用YOLO-MASK清洗COCO羊数据集提升模型精度的

从67到89&#xff1a;YOLO-MASK数据清洗实战与COCO羊数据集优化全记录 去年夏天&#xff0c;当我第一次在COCO羊数据集上训练YOLOv5模型时&#xff0c;那些徘徊在67%左右的mAP数值就像炎热的天气一样令人烦躁。作为一个长期从事计算机视觉项目的工程师&#xff0c;我深知数据质…...

打卡信奥刷题(3076)用C++实现信奥题 P7015 [CERC2013] Crane

P7015 [CERC2013] Crane 题目描述 有 nnn 个箱子等着装上船。箱子的编号是 a1,a2,⋯ ,ana_1,a_2,\cdots,a_na1​,a2​,⋯,an​。你的工作是通过若干次交换&#xff0c;将它们从小到大排列。你每次可以选择一个区间&#xff0c;将它的前半部分与后半部分交换&#xff0c;两半内…...

保姆级教程:用Python搞定数美滑块验证码(含DES加密还原与轨迹模拟)

Python实战&#xff1a;数美滑块验证码全流程破解指南 每次看到那个烦人的滑块验证码&#xff0c;是不是都有种想砸键盘的冲动&#xff1f;特别是当你的爬虫程序在数据采集过程中频繁触发数美验证时&#xff0c;整个项目进度可能都会被拖慢。作为爬虫开发者&#xff0c;我们需要…...

网盘下载速度太慢?这款开源工具让你告别限速烦恼!

网盘下载速度太慢&#xff1f;这款开源工具让你告别限速烦恼&#xff01; 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘…...

别再只当CANopen网关用!EL6751的‘直通CAN’模式,让你像用CAN盒一样调试非标设备

EL6751的直通CAN模式&#xff1a;解锁非标设备调试新姿势 当你的工控柜里躺着几台国产非标设备&#xff0c;厂商只提供了CAN盒调试软件&#xff0c;而手边只有倍福PLC时&#xff0c;那种抓狂的感觉每个自动化工程师都懂。别急着下单采购USBCAN工具&#xff0c;你需要的可能只是…...

利用快马AI快速生成系统信息查看器的安装包原型

最近在做一个系统信息查看器的小工具&#xff0c;需要快速生成一个可安装的软件包原型。传统方式从零开始搭建环境、写代码、打包测试&#xff0c;至少得折腾大半天。这次尝试用InsCode(快马)平台的AI辅助功能&#xff0c;没想到十分钟就搞定了完整流程。记录下这个高效的原型开…...