简体   繁体   中英

Proper way to filter a table using values in another table in MS Access?

I have a table of transactions with some transaction IDs and Employee Numbers. I have two other tables which are basically just a column full of transactions or employees that need to be filtered out from the first.

I have been running my query like this:

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

I have noticed slow performance when running these types of queries. I am wondering if there is a better way to build this query?

If you want all TransactionMaster rows which don't include a TransID match in BadTransactions , use a LEFT JOIN and ask for only those rows where BadTransactions.TransID Is Null (unmatched).

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

That query should be relatively fast with TransID indexed.

If you have Access available, create a new query using the "unmatched query wizard". It will guide you through the steps to create a similar query.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM