2013-04-17 26 views
1

我有一個事務處理ID和員工編號的交易表。我還有另外兩張表,這些表基本上只是一個充滿交易或員工的列,需要從第一個過濾出來。使用MS Access中另一個表中的值過濾表的正確方法?

我已經運行我的查詢是這樣的:

SELECT * FROM TransactionMaster 
Where TransactionMaster.TransID 
NOT IN (SELECT TransID from BadTransactions) 
AND etc...(repeat for employee numbers) 

運行這些類型的查詢時,我已經注意到性能下降。我想知道是否有更好的方法來構建這個查詢?

+1

使用RIGHT JOIN而不是子選擇。 –

回答

3

如果希望所有TransactionMaster行不包括在BadTransactions一個TransID匹配,使用LEFT JOIN,並要求只有那些行,其中BadTransactions.TransID Is Null(無與倫比)。

SELECT tm.* 
FROM 
    TransactionMaster AS tm 
    LEFT JOIN 
    BadTransactions AS bt 
    ON tm.TransID = bt.TransID 
WHERE bt.TransID Is Null; 

該查詢應該相對較快,TransID索引。

如果您有可用的Access,請使用「不匹配查詢嚮導」創建一個新查詢。它會引導您完成創建類似查詢的步驟。

+0

謝謝!這要快得多。 – pedram

相關問題