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 whena表没条件,会全部更新的
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 怎样写更新一行的语句(高手请进)