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

ffscu2ro  于 2023-01-29  发布在  Mysql
关注(0)|答案(2)|浏览(174)

我有两个数据库表:“雇员”和“部门”。雇员的表有两列主键id和emp_name,部门表有两列主键id和emp_name。
应该有一个表之间的关系作为外键,但由于某种原因,这个关系是虚拟的
表中的数据,如

employee
id emp_name
1  'abc'
2  'efg'
4  'hij'

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

我想从department表中选择所有不在employee表中的记录。
一种解决方案是

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

有没有更好的优化方式?

fquxozlt

fquxozlt1#

您可以使用LEFT JOIN

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

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

64jmpszr

64jmpszr2#

使用in是可以的,但是使用exists可能会执行得更快一些:

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

相关问题