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

  • Post author:
  • Post category:其他


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.userlabe

l) –on中不能有ta.userlabel这个字段

when matched then

update set ta.userlabel=‘中国’ ;



方法三,使用笨方法 insert into

修改时,可能会因为需要修改的字段是主键组成之一无法修改,或者出现方法二的情况时,我个人使用就是比较笨的方法:

①那就是先使用select 查询出相关数据;

②然后使用导出成sql语句功能;

③把导出的sql语句中想要修改的字段全部替换成想要的字段;

④删除表中相关的数据

⑤插入步骤③中修改好的sql语句



版权声明:本文为liangtongning原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。