oracle更新表时需要用到两个条件,并且这两个条件同其他表相关联;其他表查询时使用条件相同,但输出的字段不相同

oracle更新表时需要用到两个条件,并且这两个条件同其他表相关联;其他表查询时使用条件相同,但输出的字段不相同。

oracle不同于sql,不能在update语句后面写两个表,因此只能使用其他方法进行更新:

方法一,使用update:

update table_a set userlevel=‘中国’
where city in (select city from table_b where station=‘100’ and remark=‘200’)
and name in (select name from table_b where station=‘100’ and remark=‘200’);

这个方法是可以对 table_a 的 userlevel进行更新,但就会存在问题,那就是更新的数据可能会不准。因为set后面的这两个条件不是同时使用的,就会出现数据交叉重复的现象,导致数据更新不正确,因此不推荐使用,除非table_b查出来的city和name是唯一的或者主键。

方法二,使用merge into:

merge into table_a ta --需要更新的表
using (select * from table_b where station=‘100’ and remark=‘200’) tb2 --条件表
on (tb2.station=ta.station and tb2.remark=ta.remark) --条件,可以有多个,但不能和需要更新的字段相同
when matched then --当满足’on’中条件时就执行下面语句
update set o1.userlabel=‘中国’ --修改的内容
when not matched then --当不满足’on’中条件时就执行下面语句。不一定需要这个语句,看个人需要。
insert into xxx;

这个方法可以同时让两个条件相同,不过会有一个缺陷,那就是语句中 on 里面填写的条件不能和set的条件一致。就比如这样:
merge into table_a ta
using (select * from table_b where station=‘100’ and remark=‘200’) tb2
on (tb2.station=ta.station and tb2.remark=ta.remark and ta.userlabel=tb.userlabel) --on中不能有ta.userlabel这个字段
when matched then
update set ta.userlabel=‘中国’ ;

方法三,使用笨方法 insert into

修改时,可能会因为需要修改的字段是主键组成之一无法修改,或者出现方法二的情况时,我个人使用就是比较笨的方法:
①那就是先使用select 查询出相关数据;
②然后使用导出成sql语句功能;
③把导出的sql语句中想要修改的字段全部替换成想要的字段;
④删除表中相关的数据
⑤插入步骤③中修改好的sql语句

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值