我有两个数据库表:“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);
有没有更好的优化方式。
提前感谢。
答案 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)