我正在尝试按 customerType 进行搜索,但遇到了一个小问题:
SELECT DISTINCT CustomerID, CustomerName, City, State, Zip FROM qrySearchFields
WHERE CustomerID in (Select CustomerID from tblCustomerTypeLineItems Where CustomerTypeID = 241)
运行时间不到一秒,因此:
SELECT DISTINCT CustomerID, CustomerName, City, State, Zip FROM qrySearchFields
WHERE CustomerID in (Select CustomerID from tblCustomerTypeLineItems Where CustomerTypeID = 240)
但是当我尝试使用 OR 来同时查找两种类型时:
SELECT DISTINCT CustomerID, CustomerName, City, State, Zip FROM qrySearchFields WHERE
CustomerID in (Select CustomerID from tblCustomerTypeLineItems Where CustomerTypeID = 241)
Or CustomerID in (Select CustomerID from tblCustomerTypeLineItems Where CustomerTypeID = 240)
大约需要 40 秒。
是否有更好的方法来做到这一点,或者我缺少什么?
有关更多背景信息,请参阅父问题:Displaying Query Results Horizontally
最佳答案
为什么不按如下方式重构您的 OR
查询:
SELECT DISTINCT CustomerID, CustomerName, City, State, Zip
FROM qrySearchFields
WHERE CustomerID IN (SELECT CustomerID
FROM tblCustomerTypeLineItems
WHERE CustomerTypeID IN (241, 240))
如果您使用的是 SQL Server 2005 及更高版本,则可以使用公用表表达式 (CTE):
WITH cteCustomerId AS
(
SELECT CustomerID
FROM tblCustomerTypeLineItems
WHERE CustomerTypeID IN (241, 240)
)
SELECT DISTINCT CustomerID, CustomerName, City, State, Zip
FROM qrySearchFields
WHERE CustomerID IN (SELECT CustomerID
FROM cteCustomerId);
关于sql - 使 OR 查询更加简化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658774/