读书人

oracle内一个简略update语句执行结果不

发布时间: 2012-10-18 13:46:56 作者: rapoo

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

读书人网 >oracle

热点推荐