嵌套选择不接受多个列

时间:2014-03-28 09:10:06

标签: mysql

我有几张这样的表:

  

部门

     

dept_no char(4)主键

     

dept_name varchar(40)unique

     

dept_emp

     

emp_no int主键

     

dept_no char(4)主键

     

from_date date to-date date

     

dept_manager

     

dept_no char(4)主键

     

emp_no int主键

     

from_date date

     

to_date date

     

员工

     

emp_no int主键

     

first_name varchar(14)

     

last_name varchar(16)

现在我有:

select employees.emp_no, employees.first_name,employees.last_name,
departments.dept_name, (select employees.first_name 
from employees where dept_manager.emp_no =employees.emp_no )
from employees,dept_emp ,departments,dept_manager
where (employees.emp_no=dept_emp.emp_no) AND 
(dept_emp.dept_no = departments.dept_no)
LIMIT 300;

第二个选择是打印每个员工的经理姓名。

但是当我尝试打印last_name的管理器时,它会抛出一个错误。

select employees.emp_no, employees.first_name,employees.last_name,
    departments.dept_name, (select employees.first_name, **employess.last_name**
    from employees where dept_manager.emp_no =employees.emp_no )
    from employees,dept_emp ,departments,dept_manager
    where (employees.emp_no=dept_emp.emp_no) AND 
    (dept_emp.dept_no = departments.dept_no)
    LIMIT 300;

ERROR 1241(21000):操作数应包含1列

为什么会出现这个错误?

2 个答案:

答案 0 :(得分:1)

这不是子查询的工作方式,您应该为每个查询选择一列用作列

select employees.emp_no, employees.first_name,employees.last_name,
departments.dept_name, (select employees.first_name
from employees where dept_manager.emp_no =employees.emp_no ) e_first_name,
(select employess.last_name
from employees where dept_manager.emp_no =employees.emp_no ) e_last_name
from employees,dept_emp ,departments,dept_manager
where (employees.emp_no=dept_emp.emp_no) AND 
(dept_emp.dept_no = departments.dept_no)
LIMIT 300;

或者您可以使用CONCAT()合并两列中的名称,例如

select CONCAT(employees.first_name,'  ',employess.last_name) full_name

答案 1 :(得分:1)

您正在尝试将子查询中的2列放在headquery的1列中。您应该制作两个子选择,每列一个。