update A x
set x.a1=(select w.b1*2 from B w where x.userid = w.userid ),
x.a2=(select w.b2*5 from B w where x.userid = w.userid ),
x.a3=(select w.b3*8 from B w where x.userid = w.userid )
好像这样就可以了,我自己没试过,我以前好像这样写的
set x.a1=(select w.b1*2 from B w where x.userid = w.userid ),
x.a2=(select w.b2*5 from B w where x.userid = w.userid ),
x.a3=(select w.b3*8 from B w where x.userid = w.userid )
好像这样就可以了,我自己没试过,我以前好像这样写的
解决方案 »
- 高分求助,Oracle Data Provider.net Oracle10g,在VS2010中如何安装使用
- 存储过程无法调试....
- Oracle动态执行sql插入表的过程,怎么总是出现错误,可以这样写吗
- Oracle 10g 掉电后,现在能启动了,但数据表和用户都不能操作。
- ODP.NET RAC模式连接数据库报权限不足
- oracle 10g数据库与应用服务器安装在同一台机器上,环境变量究竟应该如何设置
- ****一个很急的问题,刚装了ORACLE 9.1的,我用SQL执行时,他说什么协议错误,请高正指正,!!!!!!!!!!!!!!!!!!!!!
- 企业管理器连接问题
- sql plus 登陆问题
- 高手一定要帮忙,两个简单的问题
- 在linux下配置oracle的简体中文字符集?
- 关于DECODE()的一点讨论,欢迎高手进来!
不过,最好最好能修改一下
update A
set a1=(select w.b1*2 from B w where userid = A.userid ),
a2=(select w.b2*5 from B w where userid = A.userid ),
a3=(select w.b3*8 from B w where userid = A.userid )
where userid in (select userid from B)
语句能够正确执行条件:A.userid = B.userid在B表中只存在一条数据。
update A
set (a1,a2,a3) =
(select b1*2,b2*5,b3*8 from B where B.userid = A.userid)
set (a1,a2,a3) =
(select b1*2,b2*5,b3*8 from B ) where B.userid = A.userid;
set (a1,a2,a3) =
(select b1*2,b2*5,b3*8 from B where B.userid = A.userid);
where条件不认识B这个别名啊!
两表要有关键字相连,而且必须要能建立唯一的一对一关系才行:
我觉得以上的都不行,会出现什么无法保持对应列的错误!若userid是a、b表键字,那么下面这UPDATE肯定行:
update
(
select a1,a2,a3,b1,b2,b3 from a,b where a.userid = b.userid
)
set a1 = b1,a2 = b2, a3 = b3;
若userid不是a、b表的关键字,那就建中间表吧,想法转成上面这种情况!