我有几个这样的表:
dept_no char(4)主键
dept_name varchar(40) unique
dept_emp
emp_no int主键
dept_no char(4)主键
from_date日期到日期日期
dept_manager
dept_no char(4)主键
emp_no int主键
from_date日期
to_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列
为什么会出现这个错误?
这不是子查询的工作方式,您应该为每个查询选择一列作为列
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
您正试图将子查询中的2列放在headquery的1列中。您应该创建两个子选择,每个列一个。