以前只会写一些简单的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数据库中同时更新两张表的简单方法相关推荐

  1. 实战演练 | 数据库中检索奇数或偶数行的简单方法

    从表中仅选择奇数行或偶数行听起来像是你永远不必做的事情,除非你自行这样做.在谷歌快速搜索一下,可以证实这事情是经常有人会做的,但是,很少有数据库从业者知道如何做,他们总是在线数据库社区求助寻找答案.作 ...

  2. mysql查找两表中不同的数据库表_各位大侠怎样查找两张表的里面的数据(这两张表在不同的数据库)...

    Oracle: 一.同一个实例中的两个表 相应有两个用户a(表t1).b(表t2) 将用户a的t1查询权限授予b用户 grant select on t1 to b; 之后,b就可以查询t1表了 se ...

  3. 将oracle数据库中指定的多张表结构导入word

    读库操作 /** @Author zw @DATE 2019/8/7 17:24 @VERSION 1.0.0 **/ @Service public class SaveTemplateServic ...

  4. 如何删除有外键关系的两张表的数据

    文章目录 外键的定义 如何删除外键关系的两张表(父表 子表)的数据 方式一 方式二 两张表互为外键约束,删除任何一张表都会出错 为了保证数据完整 ,有一种方式就是两张表设置外键foreign key. ...

  5. mysql 左连接两张表_mysql左连接右连接(查询两张表不同的数据)

    left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 : right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录: inner join(等值连 ...

  6. Mysql如何对两张表的相同字段,同时查询两张数据表

    前言 假设现在有两张数据表 表1如下: 表2如下: 表1和表2同时都再mysql的情况下,只有他们的uuid是一样的,其他字段信息不同,现在需要用sql语句根据uuid,同时将符合要求的数据查询出来, ...

  7. oracle数据库中批量把一张表里面的数据插入到不同的表中的方法

    oracle数据库中批量把一张表里面的数据插入到不同的表中的方法(insert first into | insert all into) 准备环境 1.oracle数据库自带的scott下的用户表 ...

  8. oracle横向合并两张表,SQL中将两个表合并成一个新表 SQL如何合并两个表并生成一个新表?...

    sql把两个表合并成一个新表的语句应该怎么写SQL SERVER: select * into 表3 from ( select 字段列表1 from 表1 union all select 字段列表 ...

  9. oracle两张表 比较好,比较Oracle两张表的数据是否一样

    比较Oracle两张表的数据是否一样 爱搞机 2008-10-21 11:00 在某些情况下,我们会需要比较两张表的数据是否一样. 假设有两张表A与表B他的字段相同,但是当中的数据可能不同,而且有些字 ...

  10. oracle:一个update修改两张表

    需求:用一个update语句修改两张表? 思路:用触发器来解决 触发器代码: 表a:table_a,表b:table_b,其中表b里面有表a的id,这个触发器意思是当修改表a的最后修改人:table_ ...

最新文章

  1. 如何在Terminal命令行模式下运行Objective-C
  2. Linux内核启动速度优化,嵌入式Linux启动时间优化的秘密之五-Bootloader
  3. SpringSecurity分布式整合之认证服务配置文件编写和测试
  4. Gnu/Linux网卡绑定bonding
  5. html引用webpack插件,使用html-webpack-plugin,运行webpack,老是报错?
  6. CF280D-k-Maximum Subsequence Sum【模拟费用流,线段树】
  7. poj 2503 Trie树
  8. Mac原生浏览器Safari,那些你都不知道的使用技巧
  9. OMNeT 例程 Tictoc7 学习笔记
  10. Google Earth Engine APPS(GEE)—— Landsat 数据的时间序列分析来监测森林转化和退化 (CODED)整体框架(万字长文)
  11. C语言预处理指令-单片机必备技能
  12. 如何消除图片中的运动模糊?
  13. 高一数学试题-2022年秋期末试卷
  14. python股票数据分析_用Python浅析股票数据
  15. oracle utl_smtp,Oracle 11g 环境下,利用utl_smtp创建发送邮件的存储过程
  16. 巴斯扩散模型-Bass Diffusion Model
  17. DataBinding原理----单向数据绑定(3)
  18. 科目一计算机答题错了能修改吗,科目一可要是错了可以修改吗
  19. cisco 内存利用率oid_交换机CPU、内存OID获取 | 聂扬帆博客
  20. Python个人笔记/试错——字符串

热门文章

  1. 小黑相关预搞书籍杂志等
  2. 罗马数字和阿拉伯数字转换
  3. unity设置一个物体是另一个物体的子物体
  4. Atitit SpringCloud 使用总结 目录 1.1. 启动一个服务注册中心EurekaServer 1 1.2. 三、创建一个服务提供者 (eureka client) 2 1.3. 创建
  5. Atitit 技术体系路线图与金字塔模型 前端技术层次金字塔 目录 1. 原理core 框架层 》》 模块 项目层 1 1.1. 技术原理层 1 1.2. 框架层 1 1.3. 模块 1 2.
  6. Atitit 事务的一些概念 目录 1. 事务的另一个特性:数据隔离级别 1 2. Spring五个事务隔离级别和七个事务传播行为 1 3. 在TransactionDefinition接口中定义了
  7. Atitit 遍历 与循环模式大总结 目录 1.1. 遍历的对象 数组 或对象 或对象数组 1 2. 遍历的概念 2 2.1. 祖先后代同胞 过滤 2 3. 常见的遍历四种方式 2 3.1.
  8. Atitit 组织软资产建设 知识管理 经济学架构体系
  9. atitit 业务 触发器原理. 与事件原理 docx
  10. Atitit..组件化事件化的编程模型--(2)---------Web datagridview 服务器端控件的实现原理and总结