ORA-01427: 单行子查询返回多于一个行,请问怎么改?
updatecableassettsett.subsectionlen=(select(selectsum(t1.cablelen)fromcablebodyt1wher...
update cableasset t set t.subsectionlen=(select (select sum(t1.cablelen) from cablebody t1 where t.assetid=t1.assetid )from cableasset t)
报上面的错,请问怎么改,谢谢! 展开
报上面的错,请问怎么改,谢谢! 展开
3个回答
展开全部
提示不是很清楚吗?
这个问题出现的原因是这样的,你不能保证一行改出来的结果是唯一的
比如说一张表如此
id score
1 10
对id为1的学生修改成绩的时候,如果只有一个score是不会报错的,但是如果出现多个,数据库就不知道该如何修改这个成绩了
比如说另外一张表有两个记录
id score
1 30
1 90
一旦你将两张表关联,更新第一张表的成绩的时候就会出现这样的错误。
解决得方法很多,比如你在更新的时候对第二张表预先max分组,然后取最大的一个成绩。或者平均的一个成绩,或者最小的,再或者改变条件,保证结果只有一个
这个问题出现的原因是这样的,你不能保证一行改出来的结果是唯一的
比如说一张表如此
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 )
这样就好叻~递归嵌套很舒服的呵呵~
这样就好叻~递归嵌套很舒服的呵呵~
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你试试这样:
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)
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)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询