新用户注册入口 老用户登录入口

[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

文章作者:转载 更新时间:2023-09-10 10:14:44 阅读数量:797
文章标签:SQLOracle数据订正关联表更新语句SET
本文摘要:本文介绍了在Oracle数据库中进行数据订正时,如何将关联表间的数据字段更新的实现方法。针对具体场景,详细说明了利用子查询和MERGE语句两种SQL语法来更新表A中的a1字段为表B中关联记录的b1字段值,并强调了限定条件在更新操作中的必要性。其中,子查询更新通过嵌套查询确保对应关系;而MERGE语法不仅能匹配更新,还能处理多条关联记录的情况,通过选取每id的最大ROWID避免冲突。同时指出,在Oracle和MySQL中不支持UPDATE FROM语法。关键词涉及:数据订正、SQL、Oracle、关联表更新、子查询、MERGE语法、限定条件、字段更新等。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_42101720/article/details/116289534。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

以前只会写一些简单的updaet语句,比如updae table set c1='XXX' 之类的

今天遇到一个数据订正的问题,项目背景如下,有个表A,有两个字段a1,a2还有一个关联表B,其中也有两个字段,b1和b2。其中a2和b2是关联的,想把A中的字段a1更新成B中的b1

理论上sql应该挺好写的,但是在oralce中实现了半天一直报语法错误。而且确实还有些小小细节没有注意到。

首先上测试数据

表1,ZZ_TEST1

19b03cdaf8c17144b6e6797851603068.png

表2,ZZ_TEST2

2ee44167019890f157d399a58d116ced.png

要把表一的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中使用。

本篇文章为转载内容。原文链接:https://blog.csdn.net/weixin_42101720/article/details/116289534。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
MERGE语句在SQL中,MERGE语句是一种用于合并两个数据集(通常来自不同的表)并根据匹配条件执行更新或插入操作的高级DML语句。在本文的上下文中,MERGE INTO语法被用来同步ZZ_TEST1和ZZ_TEST2两张表的数据,当发现ZZ_TEST1表中的id字段与ZZ_TEST2表中的pid字段相匹配时,则会将ZZ_TEST2表中的text1字段值更新到ZZ_TEST1表的text字段。
子查询更新子查询更新是SQL中的一种技术,它允许在UPDATE语句中嵌套一个SELECT查询作为要更新字段的新值来源。在文章中,通过使用子查询更新方法,可以实现将ZZ_TEST2表中的text1字段值安全地更新到ZZ_TEST1表对应的记录中,这里的关联条件是T2.pid等于T1.id。
ROWID在Oracle数据库中,ROWID是一个伪列,它是每行记录的唯一物理地址标识符。ROWID包含了表空间、文件号、块号和行在块内的偏移量等信息,可以直接定位到具体的数据块并访问特定行。在文章提供的MERGE语句示例中,为了确保在ZZ_TEST2表存在多条相同id记录时只更新一条至ZZ_TEST1表,通过比较ROWID来选取每个id的最大ROWID对应的记录进行更新操作,避免了因关联键重复而导致的数据冲突问题。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在数据库管理和数据处理中,SQL语句的灵活运用对于解决实际业务问题至关重要。近日,Oracle发布了最新的数据库更新版本,强化了对复杂关联查询和批量更新的支持,使得用户能够更加高效地执行类似文章中的数据订正操作。例如,新版本优化了MERGE INTO语法的性能,不仅提高了大数据量下的处理速度,而且增强了其并发控制能力,降低了在多线程环境下可能出现的数据冲突风险。
此外,针对跨表字段更新的场景,一些数据库专家也提出了利用窗口函数进行数据订正的新思路。通过ROW_NUMBER()、RANK()等窗口函数,可以确保在有多条关联记录的情况下选取指定的一条进行更新,进一步丰富了数据订正策略的选择范围。
另外,在SQL Server及PostgreSQL等其他主流数据库系统中,虽然不支持UPDATE FROM语法,但它们各自提供了独特的解决方案。比如SQL Server采用JOIN子句配合UPDATE实现跨表更新,而PostgreSQL则支持使用FROM子句完成类似操作,这些方法同样值得广大数据库管理员和技术开发者关注与学习。
综上所述,无论是紧跟数据库技术的最新动态,还是深入研究不同系统的特性和最佳实践,都将有助于我们在日常工作中更有效地处理数据订正以及关联表字段同步等问题,提升数据管理与维护的效率和准确性。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
netcat -l -p port_number - 启动监听特定端口的简单服务器。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
[转载]关于SysinternalsSuite全部工具详解 01-22 [转载]18.准入控制器 12-25 css每个数字添加背景 12-24 [转载]程序员入门编程,看这10本书,少走10年弯路,java二级教学视频 12-11 绿色塑料机械制造类前端企业模板下载 12-06 响应式大气长途搬家物流公司网站模板 11-02 数字代理商业公司模板下载 10-16 Vue打包后404错误排查:路由配置、静态资源路径与服务器部署详解 10-10 CSS3响应式酒店HTML5网页模板下载 09-19 本次刷新还10个文章未展示,点击 更多查看。
响应式茶叶产品展示销售类企业前端CMS网站下载 08-12 专业咨询服务展示HTML网页模板下载 08-06 jQuery实用表单文件域美化插件 07-03 [转载]【angularJS】前后台分离,angularJS使用Token认证 06-14 [转载]云计算与虚拟化工具之KVM,KVM和VMware的区别 04-06 Maven中Resource Filtering的错误类型与解决:变量未定义、过滤规则冲突及特殊字符处理在`pom.xml`构建配置中的应用 03-30 红色大气平行进口车网站HTML5模板 03-25 黑色机械设备科研公司网页模板下载 03-22 CSS模块化配置实战:提升项目可维护性与可扩展性的模块划分与导入实践 02-21 jQuery高仿真移动手机滑动侧边栏布局插件 01-21 [转载]L2-007 家庭房产 (25 分) 01-09
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"