2016-12-20 10 views
3

私は、次のSQLに基づいてすべてのレコードを選択する必要があります。SQLクエリの改善 - MSAccessを2007

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

表1で171Kレコードと表2「ID3 IN(151157)」で70Kのレコードがあります。

残念ながら、そのクエリは永遠にかかります。実際には、32GBのメモリと4倍のI7プロセッサを搭載したシステムでは完全なものではありませんでした。私はあきらめて30分後にキャンセルします。

私はこの質問を改善して1分以内に完了させる方法を教えてくれるSQLの達人または2人がいると思います。

答えて

1

あなたは、サブクエリに参加してみてください:

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

問題が解決しない場合、私は一時テーブルとしてサブクエリを作成して、それを参照して検討します。

+0

上記のクエリの構文では、MSAccess 2007でエラーが発生します。 サブクエリを使用して一時テーブルを作成し、上で説明したとおりに結合を実行するという考え方は、非常にうまく機能し、一時テーブルと結合クエリを作成します。ありがとう! – user2184214

関連する問題