oracle关联表更新

如果有A表和B表,sql server中用:
update A set field2=b.filed2 from A,B where a.field1=b.field1搞定,所以用惯了sql server的更新表语句,再用oracle的那真是特别的拗口。
情景一:如果只是更新固定值,oracle和sql server相差不大:
update A set field2=‘OK’
where exists(select 1 from B where a.field1=b.field1)


情景一:更新内容为关联表中字段
oracle更新关联表的语法有些臃肿。
update A set field2=(select b.field2 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)
对于子查询的值只能是一个唯一值,不能是多值。
另外oracle也变通了方法,用视图的方式简化:
update(select A.field2 as Afield2,B.field2 as Bfiled2 from A,B where A.field1=B.field1)
set Afield2=Bfield2

情景三:更新内容为关联表中多个字段

如果按情景二的语法,是多个字段更新岂不累死人:
update A set field3=(select b.field3,b.field4 from B where a.field1=b.field1),field4=(select b.field4,b.field4 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)

还好有如下简化语句:
update A set (field3,field4)=(select b.field3,b.field4 from B where a.field1=b.field1)
where exists(select 1 from B where a.field1=b.field1)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值