【问题标题】:i get that error ORA-01427: single-row subquery returns more than one row我得到那个错误 ORA-01427: 单行子查询返回多于一行
【发布时间】: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
  • 现在我需要找到经理,然后为该经理找到薪酬最低的员工
  • 嘿,不作为评论。改为编辑您的问题!
  • 您的查询没有按照您的想法进行。这就是为什么您在提问时应该提供样本数据和期望的结果。

标签: sql oracle subquery


【解决方案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 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      相关资源
      最近更新 更多