方法一:MERGE语句的语法

MERGE INTO 表名
USING 表名/视图/子查询 ON 连接条件 --多个条件注意()括起来
WHEN MATCHED THEN -- 当匹配得上连接条件时
更新、删除操作
WHEN NOT MATCHED THEN -- 当匹配不上连接条件时
更新、删除、插入操作

示例

MERGE INTO CAI_GRKMX a USING TMP_IMPHD b
ON (a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0)
WHEN MATCHED THEN
UPDATE SET a.HDUID=b.MXUID,a.HDBZ=1;
COMMIT;

来自网上更好的说明

MERGE INTO dept60_bonuses b
USING (
SELECT employee_id, salary, department_id
FROM hr.employees
WHERE department_id = 60
) e
ON (b.employee_id = e.employee_id)
-- 当符合关联条件时
WHEN MATCHED THEN
-- 将奖金为0的员工的奖金调整为其工资的20%
UPDATE
SET b.bonus_amt = e.salary * 0.2
WHERE b.bonus_amt = 0
-- 删除工资大于7500的员工奖金记录
DELETE
WHERE (e.salary > 7500)
-- 当不符合连接条件时
WHEN NOT MATCHED THEN
-- 将不在部门为60号的,且不在dept60_bonuses表的用工信息插入,并将其奖金设置为其工资的10%
INSERT
(b.employee_id, b.bonus_amt)
VALUES
(e.employee_id, e.salary * 0.1)
WHERE (e.salary < 7500)

方法二:作为多表级联更新的另外一种写法

UPDATE
(SELECT a.HDUID,b.MXUID,HDBZ
FROM CAI_GRKMX a
INNER JOIN TMP_IMPHD b ON a.SPID=b.SPID AND a.PIHAO=b.PIHAO AND instr(b.pihao,a.djbh)>0
)
SET HDUID=MXUID,HDBZ=1

ORACLE多表级联更新( MERGE、UPDATE FROM JOIN替代语句)的更多相关文章

  1. Oracle 外键级联更新

    Oracle数据库中,外键约束只允许级联删除,不允许级联更新,因此,如果想要实现主表数据更新后,子表外键自动更新,只能取消外键关系,通过前端程序来维护实现完整引用,一个代替的解决方案是使用延迟约束和触 ...

  2. ORACLE 两表关联更新三种方式

    不多说了,我们来做实验吧. 创建如下表数据 select * from t1 ; select * from t2; 现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致. 方式1,u ...

  3. sql-update语句多表级联更新

    在数据表更新时,可能会出现一种情况,就是更新的内容是来源于其他表的,这个时候,update语句中就加了from,下面为一个范例: update a set a.name=b.name,a.value= ...

  4. 多表更新:update,join

    1.多表更新: 下面我建两个表,并执行一系列sql语句,仔细观察sql执行后表中数据的变化,很容易就能理解多表联合更新的用法. 前期准备工作: update join_teacher_class jo ...

  5. oracle多表关联多字段update

    多表关联多字段update 有代码有J8: update spatial_references set( auth_name, auth_srid, falsex, falsey, xyunits, ...

  6. Oracle 多表关联更新

    drop table course; create table course ( id integer, teacherNo integer, teacherDesc ), teacherName ) ...

  7. 两表关联更新,用于update 回滚

    create table test1 as select * from dba_objects; create table test2 as select * from dba_objects; cr ...

  8. Oracle 查看表空间的大小及使用情况sql语句

    --1.查看表空间的名称及大小 )), ) ts_size FROM dba_tablespaces t, dba_data_files d WHERE t.tablespace_name = d.t ...

  9. oracle查看表空间的大小及使用情况sql语句

    --------------------------tablespace------------------------------------------------ 1.//查看表空间的名称及大小 ...

  10. Oracle\MS SQL Server Update多表关联更新

    原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...

随机推荐

  1. 3张大图剖析HttpClient和IHttpClientFactory在解决DNS解析问题上的殊途同归

    在开发者便利度角度,我们很轻松地使用HttpClient对象发出HTTP请求,只需要关注应用层协议的BaseAddr.Url.ReqHeader.timeout. 实际在HttpClient在源码级别 ...

  2. php 异步并行后续--兼容FPM使用的组件

    上次给人推荐了这篇文章,关于PHP异步并行的文章,之后有人评论问这个组件能不能给fpm用,我测试了一下发现不行,于是又找到一个可以给fpm用的http请求组件. 安装很简单,就这样  composer ...

  3. supervisord如何优雅的新加服务

    前言 现有supervisord 的管理下已经有服务正在运行,如果想要不重启正常运行的服务,还新添加应用如何实现呢? [建议查看官方文档中的各个action介绍,以免踩坑] http://superv ...

  4. 《花100块做个摸鱼小网站! 》第十篇—响应式布局适配PC端和移动端

    ️基础链接导航️ 服务器 → ️ 阿里云活动地址 看样例 → 摸鱼小网站地址 学代码 → 源码库地址 一.前言 大家好呀,我是summo,小网站一直有个问题,就是PC端的样式和移动端的样式是两套,并且 ...

  5. (Redis基础教程之七)如何使用Redis中的Hashes

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  6. golang配置读取值viper

    viper简介 Viper是Go应用程序的完整配置解决方案,包括12-Factor应用程序.它旨在在应用程序中工作,并且可以处理所有类型的配置需求和格式.它支持: 设置默认值 从JSON.TOML.Y ...

  7. 基于Docker搭建PHP开发环境

    Docker 是这几年非常火的一项技术,作为一名软件开发人员,应该及时的接触和掌握. 镜像加速: 可以在阿里云上免费的获取,然后进行配置即可使用.阿里云 Docker 加速器,没有阿里云账号注册一个即 ...

  8. python下的多线程与多进程

    多进程: 进程我们可以理解为是一个可以独立运行的程序单位,比如打开一个浏览器,这就开启了一个浏览器进程:打开一个文本编辑器,这就开启了一个文本编辑器进程.但一个进程中是可以同时处理很多事情的,比如在浏 ...

  9. HLS视频加密,让您的视频内容更安全!

    ** 背景介绍** HLS视频加密是一种基于HTTP Live Streaming(HLS)协议的加密技术.它的核心思想是将视频切片进行加密处理,在客户端播放时需要先获取解密密钥才能正常偶发.通过这种 ...

  10. 配置 Forwarded Headers Middleware

    来自微软的说明:Configure ASP.NET Core to work with proxy servers and load balancers | Microsoft Learn. 通过该中 ...