我有一张交易表,上面有一些交易ID和员工编号。我还有另外两个表,它们基本上只是一列事务或雇员,需要从第一个表中筛选出来。
我一直这样运行我的查询:

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

我注意到在运行这些类型的查询时性能很慢。我想知道是否有更好的方法来构建这个查询?

最佳答案

如果希望所有TransactionMaster行在TransID中不包含BadTransactions匹配项,请使用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
如果您有可用的访问权限,请使用“不匹配查询向导”创建新查询。它将指导您完成创建类似查询的步骤。

关于database - 使用MS Access中另一个表中的值筛选表的正确方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16067694/

10-11 01:34