ORA-01427: 单行子查询返回多于一个行,请问怎么改?

来源:百度知道 编辑:UC知道 时间:2024/09/24 03:24:21
update cableasset t set t.subsectionlen=(select (select sum(t1.cablelen) from cablebody t1 where t.assetid=t1.assetid )from cableasset t)

报上面的错,请问怎么改,谢谢!

update cableasset t set t.subsectionlen=(select sum(t1.cablelen) from cablebody t1 where t1.assetid=t.assetid )
这样就好叻~递归嵌套很舒服的呵呵~

提示不是很清楚吗?
这个问题出现的原因是这样的,你不能保证一行改出来的结果是唯一的
比如说一张表如此
id score
1 10
对id为1的学生修改成绩的时候,如果只有一个score是不会报错的,但是如果出现多个,数据库就不知道该如何修改这个成绩了
比如说另外一张表有两个记录
id score
1 30
1 90
一旦你将两张表关联,更新第一张表的成绩的时候就会出现这样的错误。
解决得方法很多,比如你在更新的时候对第二张表预先max分组,然后取最大的一个成绩。或者平均的一个成绩,或者最小的,再或者改变条件,保证结果只有一个

你试试这样:
update cableasset t set t.subsectionlen = (select sum(t1.cablelen) from cablebody t1 where t1.assetid = t.assetid) where exists (select t1.cablelen from cablebody t1 where t1.assetid = t.assetid)