oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
以前只会写一些简单的updaet语句,比如updae table set c1='XXX' 之类的
今天遇到一个数据订正的问题,项目背景如下,有个表A,有两个字段a1,a2还有一个关联表B,其中也有两个字段,b1和b2。其中a2和b2是关联的,想把A中的字段a1更新成B中的b1
理论上sql应该挺好写的,但是在oralce中实现了半天一直报语法错误。而且确实还有些小小细节没有注意到。
首先上测试数据
表1,ZZ_TEST1
表2,ZZ_TEST2
要把表一的text更新成表二的text1值,对应的sql如下:
update ZZ_TEST1 t1 set t1."text" = (
select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id"
)
WHERE EXISTS
(
SELECT 1 FROM ZZ_TEST2 t2 where T2."pid"=t1."id"
)
后面的where条件表示一个限制条件,只更新那些符合条件的数据,也可以写成
update ZZ_TEST1 t1 set t1."text" = (
select T2."text1" from ZZ_TEST2 t2 where T2."pid"=t1."id"
)
where t1."id" in (select "pid" from ZZ_TEST2 )
另外还有一种merge的写法,对应的sql如下:
merge into ZZ_TEST1 t1 using ZZ_TEST2 t2 on (t1."id" =t2."pid")
when matched then
update set t1."text"=t2."text1"
为了避免T2中有多条数据对应T1中的数据,可以把sql改成如下的方式:
MERGE INTO ZZ_TEST1 t1 USING
(
SELECT * FROM ZZ_TEST2 X WHERE X. ROWID =
(SELECT MAX(Y.ROWID) FROM ZZ_TEST2 Y WHERE X."id" = Y."id" )
)
t2
ON (t1."id" = t2."pid")
WHEN MATCHED THEN
UPDATE SET t1."text" = t2."text1"
还有一种update from 的语法,经过测试在oracle和mysql中不适用
总结一下,项目中尝尝需要把一张表的字段更新到另一张表中的某一个字段。可以使用update语法,并要做好限定。会使用merge的语法,另外还有一种merge的语法也可以,update from 不能再oracle和mysql中使用。
oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法相关推荐
- 实战演练 | 数据库中检索奇数或偶数行的简单方法
从表中仅选择奇数行或偶数行听起来像是你永远不必做的事情,除非你自行这样做.在谷歌快速搜索一下,可以证实这事情是经常有人会做的,但是,很少有数据库从业者知道如何做,他们总是在线数据库社区求助寻找答案.作 ...
- mysql查找两表中不同的数据库表_各位大侠怎样查找两张表的里面的数据(这两张表在不同的数据库)...
Oracle: 一.同一个实例中的两个表 相应有两个用户a(表t1).b(表t2) 将用户a的t1查询权限授予b用户 grant select on t1 to b; 之后,b就可以查询t1表了 se ...
- 将oracle数据库中指定的多张表结构导入word
读库操作 /** @Author zw @DATE 2019/8/7 17:24 @VERSION 1.0.0 **/ @Service public class SaveTemplateServic ...
- 如何删除有外键关系的两张表的数据
文章目录 外键的定义 如何删除外键关系的两张表(父表 子表)的数据 方式一 方式二 两张表互为外键约束,删除任何一张表都会出错 为了保证数据完整 ,有一种方式就是两张表设置外键foreign key. ...
- mysql 左连接两张表_mysql左连接右连接(查询两张表不同的数据)
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 : right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连 ...
- Mysql如何对两张表的相同字段,同时查询两张数据表
前言 假设现在有两张数据表 表1如下: 表2如下: 表1和表2同时都再mysql的情况下,只有他们的uuid是一样的,其他字段信息不同,现在需要用sql语句根据uuid,同时将符合要求的数据查询出来, ...
- oracle数据库中批量把一张表里面的数据插入到不同的表中的方法
oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...
- oracle横向合并两张表,SQL中将两个表合并成一个新表 SQL如何合并两个表并生成一个新表?...
sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表 ...
- oracle两张表 比较好,比较Oracle两张表的数据是否一样
比较Oracle两张表的数据是否一样 爱搞机 2008-10-21 11:00 在某些情况下,我们会需要比较两张表的数据是否一样. 假设有两张表A与表B他的字段相同,但是当中的数据可能不同,而且有些字 ...
- oracle:一个update修改两张表
需求:用一个update语句修改两张表? 思路:用触发器来解决 触发器代码: 表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_ ...
最新文章
- 如何在Terminal命令行模式下运行Objective-C
- Linux内核启动速度优化,嵌入式Linux启动时间优化的秘密之五-Bootloader
- SpringSecurity分布式整合之认证服务配置文件编写和测试
- Gnu/Linux网卡绑定bonding
- html引用webpack插件,使用html-webpack-plugin,运行webpack,老是报错?
- CF280D-k-Maximum Subsequence Sum【模拟费用流,线段树】
- poj 2503 Trie树
- Mac原生浏览器Safari,那些你都不知道的使用技巧
- OMNeT 例程 Tictoc7 学习笔记
- Google Earth Engine APPS(GEE)—— Landsat 数据的时间序列分析来监测森林转化和退化 (CODED)整体框架(万字长文)
- C语言预处理指令-单片机必备技能
- 如何消除图片中的运动模糊?
- 高一数学试题-2022年秋期末试卷
- python股票数据分析_用Python浅析股票数据
- oracle utl_smtp,Oracle 11g 环境下,利用utl_smtp创建发送邮件的存储过程
- 巴斯扩散模型-Bass Diffusion Model
- DataBinding原理----单向数据绑定(3)
- 科目一计算机答题错了能修改吗,科目一可要是错了可以修改吗
- cisco 内存利用率oid_交换机CPU、内存OID获取 | 聂扬帆博客
- Python个人笔记/试错——字符串
热门文章
- 小黑相关预搞书籍杂志等
- 罗马数字和阿拉伯数字转换
- unity设置一个物体是另一个物体的子物体
- Atitit SpringCloud 使用总结 目录 1.1. 启动一个服务注册中心EurekaServer	1 1.2. 三、创建一个服务提供者 (eureka client)	2 1.3. 创建
- Atitit 技术体系路线图与金字塔模型 前端技术层次金字塔 目录 1. 原理core 框架层 》》 模块 项目层	1 1.1. 技术原理层	1 1.2. 框架层	1 1.3. 模块	1 2.
- Atitit 事务的一些概念 目录 1. 事务的另一个特性:数据隔离级别	1 2. Spring五个事务隔离级别和七个事务传播行为	1 3. 在TransactionDefinition接口中定义了
- Atitit 遍历 与循环模式大总结 目录 1.1. 遍历的对象 数组 或对象 或对象数组	1 2. 遍历的概念	2 2.1. 祖先后代同胞 过滤	2 3. 常见的遍历四种方式	2 3.1.
- Atitit 组织软资产建设 知识管理 经济学架构体系
- atitit 业务 触发器原理. 与事件原理 docx
- Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结