我有一个查询从一个表中读取大约342条记录,并检查另一个表中是否存在大约32000条记录的记录。为此,我使用了'NOT IN'条件,并且在'NOT IN'条件下更快地运行查询的最佳方法是看起来这个过程想要占用我的生命!
SELECT fname,lname,position
FROM employees
WHERE employees.id NOT IN(select projects.empid where projects.id='BRS213F-013')
我真的应该做什么?
答案 0 :(得分:6)
如何使用LEFT JOIN
,
SELECT a.fname, a.lname, a.position
FROM employees a
LEFT JOIN projects b
ON a.ID = b.emp_ID AND
b.id = 'BRS213F-013'
WHERE b.emp_ID IS NULL
确保Employees.ID
和projects.emp_ID
必须在其上定义键才能提高性能。
要使Employees.ID
成为主键,如果尚未实现,
ALTER TABLE Employees ADD CONSTRAINT tb_pk PRIMARY KEY (ID)
要使projects.emp_ID
成为引用Employees.ID
的外键(如果尚未实现)
ALTER TABLE Projects
ADD CONSTRAINT tb_fk FOREIGN KEY (EmpID) REFERENCES Employees (ID)
答案 1 :(得分:0)
SELECT fname,lname,position
FROM employees
WHERE NOT EXISTS
(select * where projects.id='BRS213F-013' AND employees.id = projects.empid)
答案 2 :(得分:0)
NOT EXISTS比
更有效