大家是不是也经常碰到单行子查询返回多个行的错误提示。我已经碰到数次这种错误了,这种错误是基于数据存在的,开发人员也许在最初写这个查询语句的时候没有合适的数据,所以没有发现错误,当满足条件的数据出现后才会给出这种错误提示,特别是非常复杂的查询语句,排查原因变得非常困难。
我列举两条简单的查询语句供读者学习。
1.select * from emp where job =(select job from emp a where a.job = emp.job)
2.select (select ename from emp a where a.job = emp.job) from emp
第一条查询语句,where条件里面的等于明显是单行比较符,当等于后面的子查询返回多行时,就会出现单行子查询返回多个行的错误提示。
第二条查询语句,子查询的结果是作为父查询的一个列,所以也要求返回单行,当子查询出现多条返回记录时,同样会出现单行子查询返回多个行的错误提示。