SQL简单查询输出不正确

时间:2017-06-26 18:23:22

标签: mysql sql

我有以下两个表:

dept_emp{emp_no(pk), dept_no(pk)} 
departments{dept_no(pk), dept_name} 

问题是:'检索曾在'教育'部门工作但未参与"开发的员工的emp_no"部。

我提出了以下问题:

SELECT t1.emp_no 
FROM
   (SELECT m.emp_no
    FROM departments d, dept_emp m
    WHERE d.dept_no = m.dept_no AND d.dept_name='Education') t1,
   (SELECT m.emp_no
    FROM departments d, dept_emp m
    WHERE d.dept_no = m.dept_no AND d.dept_name='Development') t2
WHERE t1.emp_no != t2.emp_no;

这个想法是:First select all the employees who work for the Education Department. Second, select the employees who work for the Development department. Finally, select the ids that do not exist in the second table(e.g people who work at the Development department

我正在努力实现: 1.选择在教育部门工作的所有员工。 2.选择在开发部门工作的所有员工。 3.执行减号操作

为什么这不起作用。有什么建议?

2 个答案:

答案 0 :(得分:2)

您可以使用not in

  SELECT m.emp_no
  FROM departments d
  INNER JOIN  dept_emp m on  d.dept_no = m.dept_no 
        AND d.dept_name='Education'
  WHERE m.emp_no not in (
      SELECT m.emp_no
      FROM departments d
      INNER JOIN  dept_emp m on  d.dept_no = m.dept_no 
            AND d.dept_name='Development' )

答案 1 :(得分:2)

尝试以下查询

SELECT de.*
FROM dept_emp de
JOIN departments d ON d.dept_no = de.dept_no
WHERE d.dept_name = 'Education' AND NOT EXISTS (
    SELECT *
    FROM dept_emp i_de
    JOIN departments i_d ON i_d.dept_no = i_de.dept_no
    WHERE i_d.dept_name = 'Development' AND i_de.emp_no = de.emp_no
)

外部查询选择在教育部门工作的员工。内部查询选择在开发部门工作的员工。

NOT EXISTS将否定内部查询(即不在开发部门工作的员工)。

等式i_de.emp_no = de.emp_no确保对同一员工进行比较。