日期:2014-05-17  浏览次数:20692 次

oracle内一个简单update语句执行结果不正确!
如题,我有两个表info和bcsheet,结构如下:
info:
  corpname ADDRESS
天津市河西区管理局 天津市河西区
天津市河东区管理局 天津市河东区
天津市静海县管理局
天津市北辰区管理局
天津市红桥区管理局


bcsheet:
  cn ADDRESS  
天津市河西区管理局 天津市河西区
天津市河东区管理局
天津市静海县管理局 天津市静海县
天津市宝坻管理局 天津市宝坻
天津市红桥区管理局 天津市红桥区


我想实现的目标是将bcsheet表内的ADDRESS地址添加到info表内名称相同的地址段内,info表中在bcsheet表中没有的记录不变动,info表中如果ADDRESS记录不为空,那么也不变动。
我用的语句如下:

update info a set a.ADDRESS=
(select b.ADDRESS from BCSHEET b 
where a.corpname = b.cn and a.ADDRESS is null) 

可是结果得到的却是
info:
  corpname ADDRESS
天津市河西区管理局  
天津市河东区管理局  
天津市静海县管理局 天津市静海县
天津市北辰区管理局
天津市红桥区管理局 天津市红桥区

我想到的结果是如下的:

info:
  corpname ADDRESS
天津市河西区管理局 天津市河西区
天津市河东区管理局 天津市河东区
天津市静海县管理局 天津市静海县
天津市北辰区管理局
天津市红桥区管理局 天津市红桥区

------解决方案--------------------
update info a set a.ADDRESS=
(select b.ADDRESS from BCSHEET b
where a.corpname = b.cn ) where ADDRESS is null