oracle update语句的复杂写法,求大神

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle update语句的复杂写法,求大神相关的知识,希望对你有一定的参考价值。

例如:update 表a set case when 表b='2' then a.aa=b.bb end

好像是
一条update只能修改一张表里的字段,但是可以关联多张表去修改。不知道你用的是什么数据库。
常用的sqlserver格式如下:
update table1 set a.字段1=b.字段1,....,a.字段N=b.字段N from table1 a,table2 b where 两个表的关联字段。
常用的oracle格式如下:
update table1 a set (a.字段1,....,a.字段N) =(select b.字段1,...,b.字段N from table2 b where 两个表的关联字段) where exists (select 1 from table2 b where 两个表的关联字段)。
注意oracle语句里的exists不能省略,否则会导致没有对应关系的数据修改错误,甚至会报错。追问

oracle 不能使用update from吧。

追答

不能

参考技术A 表b='2'是什么意思?这个UPDATE对表a没有任何限制,结果是把表a的全部aa字段都更新了,而且a.aa=b.bb这句很可能导致返回多行的错误, 参考技术B 更新语句,用不了case when

a表没条件,会全部更新的

oracle update语句的几点写法

update两表关联的写法包括字查询 

1.update t2 set parentid=(select ownerid from t1 where t1.id=t2.id); 

2. 
update tb_client_win_lost_report a set a.rolling_code_id=2 
where game_code_id=70000 
and exists 
(select ‘x‘ from (select a.id 
from (select id,level_ from tb_admin_role connect by prior id=parent_id start with id =1) a, 
(select lv_id from tb_rolling_plan where rolling_code_id = 2 and game_code_id=70000) b 
where b.lv_id=a.id) c where a.role_id=c.id) 
and rolling_code_id=1 

3. 
update (select rolling_code_id from tb_client_win_lost_report a,temp_role_id b 
where a.role_id=b.id 
and rolling_code_id=1) a set a.rolling_code_id=2; 

4. 
update tb_client_win_lost_report a set a.rolling_code_id=2 
where game_code_id=70000 
and exists 
(select ‘x‘ from (select id from temp_role_id) c where a.role_id=c.id) 
and rolling_code_id=1 
and rownum<100000; 
commit; 

5.

update 多个字段的写法 
update a set (c1,c2,c3) =(select b1,b2,b3 from b where......) where ......; 

以上是关于oracle update语句的复杂写法,求大神的主要内容,如果未能解决你的问题,请参考以下文章

oracle 中plsql 怎样写更新一行的语句(高手请进)

oracle update语句的几点写法

求oracle大神帮忙解决下面这个行列转换问题,谢谢!

跪求:oracle如何在数据分组后更新(update)?求大神指导啊~~~万分感谢

oracle update语句怎么写

python连接MYSQL数据库,调用update语句后无法更新数据,求大神解决