oracle update的问题。高手请进。

来源:百度知道 编辑:UC知道 时间:2024/07/05 09:14:38
update a
set a.帐号=
(select b.帐号 from b where a.交易金额=b.交易金额)
运行后发现a表中帐号字段的内容全部没有了。于是改为:
update a
set a.帐号=
(select b.帐号 from b where a.交易金额=b.交易金额)
where a.帐号=' ' or a.帐号 is null
但运行结果没有数据被更新,而根据我手动比较2表的结果,应该是有符合更新条件的记录。请高手赐教。
谢谢!我按badkano的方法试了,不顶用。
2009年3月29日回复:我试过了,有结果出来。

怕是你账号那个字段是char型的吧,即使你看到的是null,但是实际上却有长度

select length(帐号) from a;看一下

如果真那样的话,你可以把a.帐号=' ' or a.帐号 is null
改成trim(a.帐号) is null
------------------------------------------------------------
不行的话你就
select b.帐号 from a,b where a.交易金额=b.交易金额
看能否查出来东西

这个问题应该是“单行子查询返回多行”的问题,就是 a.帐号=
(select b.帐号 from b where a.交易金额=b.交易金额) 中,oracle不允许后面括号中查出多个值。我认为解决方案可以把后面加个判断比如max,min使其唯一,然后写个存储过程循环来实现多次update。不知道有没有更简便的方法~~

用下面的sql语句执行可以实现多行结果更新
用语言解释就是:
只要存在 a.交易金额=b.交易金额这样的数据,就把a.帐号更新成b.帐号
不知道你是不是这个意思,如果是那就没问题了。
update a
set a.帐号=b.帐号
where exists
(select b.帐号 from b where a.交易金额=b.交易金额)