2013-04-03 44 views
3

我有一个查询从一个表读取大约342条记录,并检查记录是否不存在于具有大约32000条记录的另一个表中。为此,我已经使用'NOT IN'条件,并且以'NOT IN'条件更快地运行查询的最佳方式就像流程想要完成我的生活一样!查询'NOT IN'条件太慢

SELECT fname,lname,position 
FROM employees 
WHERE employees.id NOT IN(select projects.empid where projects.id='BRS213F-013') 

我真的该怎么办?

+2

实际上这不是完整的查询,在内部select中有一个'FROM'丢失。 – scones

+0

愚蠢的,不,它本身并不慢! – goseo

+0

是的from是缺少的,但很明显from子句是我错过的项目! :D – goseo

回答

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.IDprojects.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

NOT IN通常真的很慢,并且这个建议是在没有任何数据库结构工作的情况下降低时间的最佳机会。 – 0xCAFEBABE

0
SELECT fname,lname,position 
FROM employees 
WHERE NOT EXISTS 
(select * where projects.id='BRS213F-013' AND employees.id = projects.empid) 
外键