oracle同时删除2张表数据库,在Oracle数据库中同时更新两张表的简单方法

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

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

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

首先上测试数据

表1,zz_test1

c9f25f6fbcda18f64acca6a822f395fd.png

表2,zz_test2

306ed8898e26cc81e0d4c3d339ff4827.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中使用。

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值