2016-12-20 108 views
3

我有一个需要选择基于以下SQL中的所有记录:SQL查询改进 - MSACCESS 2007

Select ID, ID2 From Table1 Where ID2 NOT IN (Select ID2 From Table2 Where ID3 IN (151,157)) 

有171k记录表1和70K记录表2中,其中 'ID3 IN(151157)'。

不幸的是,该查询需要永久;事实上,我从来没有在配备32GB内存和四核I7处理器的系统上看到它的完整性。 30分钟后放弃取消。

我认为这里有一个SQL大师或两个可以告诉我如何改进这个查询,并在一分钟内完成。

回答

1

你可以尝试加入子查询:

Select ID, ID2 
From Table1 
LEFT JOIN 
(Select ID2 
From Table2 
Where ID3 IN (151,157)) 
WHERE ID2 IS NULL 

如果不行,我会考虑创建子查询的临时表和引用这一点。

+0

上面的查询的语法会在MSAccess 2007中产生错误。 但是,您使用子查询创建临时表然后根据上述方式运行连接的想法工作得非常好,并且两者都在5秒内创建临时表和连接查询!谢谢! – user2184214