我得到那个错误 ORA-01427: 单行子查询返回多于一行

Posted

技术标签:

【中文标题】我得到那个错误 ORA-01427: 单行子查询返回多于一行【英文标题】:i get that error ORA-01427: single-row subquery returns more than one row 【发布时间】:2019-04-02 08:21:09 【问题描述】:

我编写此查询是为了让作为经理的员工为该经理管理的员工选择最低工资

select min(e.sal) from emp e 
where e.mgr = (select empno from emp  where job = upper('manager'))
group by e.sal, e.mgr

【问题讨论】:

向我们展示一些示例表数据和预期结果。全部为格式化文本,而不是图像。 EMPNO ENAME JOB MGR HIREDATE SAL COMM ---------- ---------- --------- ------ ---- --------- ---------- ---------- DEPTNO ---------- 7369 SMITH CLERK 7902 17- DEC-80 800 20 7499 艾伦推销员 7698 20-FEB-81 1600 300 30 7521 病房推销员 7698 22-FEB-81 1250 500 现在我需要找到经理,然后为该经理找到薪酬最低的员工 嘿,不作为评论。改为编辑您的问题! 您的查询没有按照您的想法进行。这就是为什么您在提问时应该提供样本数据和期望的结果。 【参考方案1】:

您的子选择 select empno from emp where job = upper('manager') 返回不止一行。 您可以将 WHERE 子句从 = 更改为 IN - 结果将是所有经理的列表及其员工的最低工资:

select min(e.sal), e.mgr 
  from emp e 
where e.mgr IN (select empno from emp  where job = upper('manager'))
group by e.sal, e.mgr

【讨论】:

【参考方案2】:

公司有多个经理,因此您编写的此查询返回多行:

select empno from emp  where job = upper('manager')

当您编写等号 = 时,您对 SQL 编译器说,您期望上述查询的结果只有一行。您应该使用 IN 函数,而不是写等号:

 e.mgr IN (select empno from emp  where job = upper('manager'))

完整的代码,应该是这样的:

select min(e.sal) from emp e 
where e.mgr in (select empno from emp  where job = upper('manager'))
group by e.sal, e.mgr 

【讨论】:

以上是关于我得到那个错误 ORA-01427: 单行子查询返回多于一行的主要内容,如果未能解决你的问题,请参考以下文章

ORA-01427: 单行子查询返回多行更新

ORA-01427 单行子查询返回多行 - 如何解决?

Oracle APEX 交互式报告中的错误 - ORA-01427:单行子查询返回多于一行

ORA-01427: 单行子查询返回多于一行 ,,WHEN USING SELECT COUNT

ORA-01427单行子查询返回多于 1 行

Oracle SQL:ORA-01427:单行子查询返回多于一行