我有以下两个表:
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.执行减号操作
为什么这不起作用。有什么建议?
答案 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
确保对同一员工进行比较。