我敢肯定,这是一个非常简单的SQL问题,但我担心我的SQL-fu仍然无法帮助我解决问题。如何在没有子查询的情况下在SQL中执行多个成员资格测试?
我有一张销售订单和客户表。每个销售订单都有一个客户账户的ID号码和一个客户的ID号码(他们可能是一样的,但通常不是) - 之间存在一对多的关系一个“账单”和“船到”[例如,假设我向谷歌出售东西,“账单”将是谷歌的山景总部,但“船到”可能是谷歌的日内瓦办事处。)
所以我有一个基本上询问以下问题的查询: “给我销售订单表中的总销售额,其中此客户的Bill To与John Doe关联,或者此客户的Ship To与John Doe关联,但不包含该法案也是如此。“
和查询我已经是相当简单(读:幼稚)
SELECT SUM(price) FROM salesOrders
WHERE
(
(salesOrders.BillTo IN (SELECT customerID FROM customers WHERE customers.salesman = 'JOHNDOE')
OR
(salesOrders.ShipTo IN (SELECT customerID FROM customers WHERE customers.salesman = 'JOHNDOE')
AND
salesOrders.BillTo NOT IN (SELECT customerID FROM customers WHERE customers.salesman = 'JOHNDOE')
)
)
查询工作,但它只是需要的时间太长(〜6秒执行)。我几乎肯定有一个非常简单的方法来提取子查询,所以我没有三重复或删除子查询完全取代它们,我只是不知道该怎么做。 :(从好的一面来看,这可能很容易得到某人的支持:)
在此先感谢。
您使用的数据库是? – Dan 2011-01-27 16:24:09