Subquery returns more than 1 row报错

今天在写项目过程中,mysql代码出现了Subquery returns more than 1 row报错

img

报错意思是:子查询返回多余一行


解决:将 = 写成 in ,因为=是表示查询一行,而in是查询多行

img

返回多行用in关键字,返回单行直接用等号就行了啊

不知道你这个问题是否已经解决, 如果还没有解决的话:

  • 以下回答来自chatgpt:

    答案:

    "Subquery returns more than 1 row"报错的意思是子查询返回的结果超过了1行,这通常是因为在where子句中使用了=运算符,但是期待的却是单个值,解决这个问题的方法可以有以下几种:

    方案一: 使用in运算符代替=运算符,因为in运算符可以匹配多个值,例如:

    select name from tb_students_info
    where dept_id in 
    (select dept_id from tb_departments where dept_name='Computer');
    

    方案二: 使用limit 1限制子查询只返回1行结果,例如:

    select name from tb_students_info
    where dept_id=(select dept_id from tb_departments where dept_name='Computer' limit 1);
    

    方案三: 使用any和some关键字,它们可以和>、<、=、<=、>=、<>、!=等运算符连用来处理多行结果,例如:

    select name from tb_students_info
    where dept_id = any
    (select dept_id
    from tb_departments
    where dept_name='Computer');
    

    方案三中的any和some与本次开发需要符合。

    总的来说,使用in运算符或限制子查询结果只有1行是比较常用的解决方法。纯粹将"="改为"in"不一定是最好的选择,需要根据实际情况进行选择。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^