子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作相关的知识,希望对你有一定的参考价值。

UPDATE JSKLIB SET JSKLIB.LIB980=(select sum(JSKLIB.LIB008) from JSKLIB,JSKLIA WHERE JSKLIB.LIB001=JSKLIA.LIA001
group by JSKLIB.LIB003,substring(JSKLIA.LIA003,1,6))
这是我写的一个UPDATE更新语句,要求是更新字段JSKLIB.LIB980的值,条件是取JSKLIB.LIB008当月的和。但在执行语句时,提示“消息 512,级别 16,状态 1,第 2 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。”
请高手帮忙解答下,不甚感激!

addnumber>后面这个子查询,必须是一个值,如果是多个值的话,就会报这个错误。

既然要大于一个值,那么可以大于一个最大值,用max函数,或者联合写成相关子查询,外部表与内部表字段关联。

返回值可指定

函数的返回值类型是在定义函数时指定的。return 语句中表达式的类型应与定义函数时指定的返回值类型一致。如果不一致,则以函数定义时的返回值类型为准,对 return 语句中表达式的类型自动进行转换,然后再将它返回给主调函数使用。

在调用函数时,如果需要从被调函数返回一个值供主调函数使用,那么返回值类型必须定义成非 void 型。此时被调函数中必须包含 return 语句,而且 return 后面必须要有返回值,否则就是语法错误。

参考技术A 执行一下子查询select sum(JSKLIB.LIB008) from JSKLIB,JSKLIA WHERE JSKLIB.LIB001=JSKLIA.LIA001
group by JSKLIB.LIB003,substring(JSKLIA.LIA003,1,6) 看是否返回多于一行?追问

是的,有多行记录,因为我是按品号求当月的和,然后回写到JSKLIB.LIB980字段的。也就是不同的品号各自按月求和。

追答

只有当子查询返回一行的时候,才会不报错.看看是否少了where条件?

建议子查询JSKLIB换一个别名以免和UPDATE语句的JSKLIB混淆

select sum(b.LIB008) from JSKLIB b,JSKLIA WHERE b.LIB001=JSKLIA.LIA001
and b.品号=JSKLIB.品号 --请自行修改此句

group by b.LIB003,substring(JSKLIA.LIA003,1,6)

本回答被提问者采纳

sqlserver 表 无法更新和删除 子查询返回的值不止一个

这是语句
delete from khppzd
where KHPPZD_XTDWBH is null
and KHPPZD_KHMC not like '%非协议%'
and KHPPZD_JS in('1','2')
这是错误提示
消息 512,级别 16,状态 1,过程 khppzd_update,第 19 行
子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。
语句已终止。
无法删除和更新,select正常,请大神指点

参考技术A 你确定是那个delete的问题吗??
这个delete语句和错误提示的khppzd_update有啥关系?又没有子查询...

应该是其它地方的问题,再检查一下“过程 khppzd_update,第 19 行子查询返回的值不止一个”

祝你成功!

以上是关于子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作的主要内容,如果未能解决你的问题,请参考以下文章

SQL问题,子查询返回的值不止一个!

sql 问题子查询返回的值不止一个。

sqlserver 表 无法更新和删除 子查询返回的值不止一个

SQL之子查询

子查询返回超过 1 个值。当子查询跟随 = 或子查询用作表达式时,这是不允许的

SQL查询时错误:子查询返回的值多于一个