SQL:从表1中选择不在表2中的记录

时间:2015-12-13 06:11:22

标签: mysql sql

我有两个数据库表:“employee”和“department”。 employee的表有2列Primary_key id和emp_name 并在部门表emp_id和dep_name。

假设是关系b / w表作为外键, 但出于某种原因,这种关系是虚拟的

so data in tables like 
employee
id emp_name
1  'abc'
2  'efg'
4  'hij'

department
emp_id dept_name
1      'it'
2      'engineering'
3      'management'
5      'process'

想要选择部门表中不在员工表中的所有记录。

其中一个解决方案是

select d.* 
from department 
where d.id not in(select id from employee);

有没有更好的优化方式。

提前感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用LEFT JOIN

SELECT d.*
FROM department d
LEFT JOIN employee e
  ON d.emp_id = e.id
WHERE e.id IS NULL;

您应该比较执行计划以检查哪个查询具有最佳性能。

答案 1 :(得分:0)

使用in,就像你一样,很好。但是,使用exists可能会更快一点:

SELECT *
FROM   department d
WHERE  NOT EXISTS (SELECT *
                   FROM   employee e
                   WHERE  d.emp_id = e.id)