对于oracle两表关联更新的问题解决办法

昨天测程序的时候在oracle两表关联更新的时候发现了错误single-row subquery returns more than one row,这个错误在网上有很多解决办法,现在将语句贴出来,大家看看:

1 update MAP_5065 a set a.BUTXT = 
2 (select c.BUTXT from ERP_0011 c where c.BUKRS=a.BUKRS) 
3 where  exists(select * from ERP_0011 d where a.BUKRS=d.BUKRS);
4 

 

 

目前这个错误意思是索要一行的值结果返回了多行,这个在oracle中是不支持的,在sybase数据库中支持,现在是要限制后面子查询返回的记录条数,哦在网上找了很多的资料,试了各种办法,但是对于这种更新表与关联表是一对多的方式在我这儿测试都不行,问了一个传说中也是现实中的高手,将语句修改如下:

update MAP_5065 a set a.BUTXT = 
(
select max(c.BUTXT) from ERP_0011 c where c.BUKRS=a.BUKRS) 
where  exists(select * from ERP_0011 d where a.BUKRS=d.BUKRS);

 

 

这样执行是没有问题的,程序测试成功,我对oracle数据库的遍历机理不是很了解,所以在解决问题的时候只是单纯的找解决方法,而没有从原理上入手,希望oracle高手可以跟一下,讲解一下oracle的这种用法的原理

 

posted on 2011-01-24 10:29  天行者2009  阅读(1230)  评论(0编辑  收藏  举报