SQL报错Subquery returned more than 1 value的含义及触发原因咨询
报错含义
你收到的报错核心规则是:当子查询被用作输出表达式,或者跟在=、!=、<这类比较运算符之后时,SQL强制要求该子查询只能返回1行1列的单个结果。你提交的子查询返回了多条结果,触发了语法校验失败。
代码违规点
你的CASE语句中WHEN tagged_id != ' '分支下的子查询SELECT tagged_id FROM stock没有加过滤条件,会直接返回stock表全表所有行的tagged_id值,数据库无法判断你要把哪一行的结果赋值给当前查询行的Tag字段,所以抛出报错。
修复方案
如果你的需求是当前行的tagged_id不为空格时直接用该行的tagged_id,否则用该行的ps_id,完全不需要嵌套子查询,直接简化即可:
SELECT CASE WHEN tagged_id != ' ' THEN tagged_id ELSE ps_id END AS 'Tag' FROM stock
如果确实有子查询的使用需求,必须通过WHERE条件限定子查询仅返回1行,或者使用MAX()、MIN()这类聚合函数强制返回单个值,示例如下:
SELECT CASE WHEN tagged_id != ' ' THEN (SELECT MAX(tagged_id) FROM stock) ELSE ps_id END AS 'Tag' FROM stock
内容的提问来源于stack exchange,提问作者Zuries
相关产品推荐
相关产品推荐

