子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作
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.LIA001group 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正常,请大神指点
这个delete语句和错误提示的khppzd_update有啥关系?又没有子查询...
应该是其它地方的问题,再检查一下“过程 khppzd_update,第 19 行子查询返回的值不止一个”
祝你成功!
以上是关于子查询返回的值不止一个.当子查询跟随在 =,!=,<,<=,>,>= 之后,或子查询用作的主要内容,如果未能解决你的问题,请参考以下文章
sqlserver 表 无法更新和删除 子查询返回的值不止一个