1

我有一个交易表,其中包含一些交易 ID 和员工编号。我还有另外两个表,它们基本上只是一个充满交易或员工的列,需要从第一个表中过滤掉。

我一直在像这样运行我的查询:

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

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

4

1 回答 1

3

如果您想要所有TransactionMaster不包含TransID匹配项的行,请BadTransactions使用 a并仅询问(不匹配的)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索引。

如果您有可用的访问权限,请使用“不匹配的查询向导”创建一个新查询。它将指导您完成创建类似查询的步骤。

于 2013-04-17T19:24:22.487 回答