首页 > 解决方案 > SQL 问题:错误代码:1242。子查询返回多于 1 行

问题描述

目标

我只是想选择那些薪水高于 HCL(company-employe) 的员工的详细信息。

表

我试过的:

SELECT Emp.emp_id, Emp.Emp_name, Department.dept_name, Emp.Salary, Company.company_name from emp 
 JOIN department ON(emp.emp_id=department.emp_id) 
  JOIN company ON(department.dept_id=company.dept_id) 
   where emp.salary > (SELECT Emp.Salary FROM emp where Company.company_name='HCL');

问题 :

当我执行此查询时,它显示:错误代码:1242。子查询返回超过 1 行:

为了消除上述错误,我试过:

SELECT Emp.emp_id, Emp.Emp_name, Department.dept_name, Emp.Salary, Company.company_name from emp 
     JOIN department ON(emp.emp_id=department.emp_id) 
      JOIN company ON(department.dept_id=company.dept_id) 
       where emp.salary > (SELECT Emp.Salary FROM emp where Company.company_name='HCL' LIMIT 1);

我知道通过向查询提供LIMIT并没有提供所需的输出,但它删除了子查询返回超过 1 行的错误,并且当我执行此查询时,它在输出中提供空白行和列。

因此,任何人都可以帮助我在查询中缺少的地方和内容来选择所需的详细信息..

标签: sqljoinsubquery

解决方案


我认为你想要:

select 
    e.emp_id, 
    e.emp_name, 
    d.dept_name, 
    e.salary, 
    c.company_name 
from emp e
inner join department d on e.emp_id = d.emp_id
inner join company c on d.dept_id = c.dept_id
where e.salary > (
    select max(e1.salary)
    from emp e1 
    inner join company c1 on c1.dept_id = e1.dept_id
    where c1.company_name = 'HCL'
);

这将为您提供薪水高于 HCL 公司所有薪水的员工。


推荐阅读