Я уверен, что это очень простой вопрос SQL, но я боюсь, что мой SQL-фу все еще не подходит, чтобы я смог разобраться.
У меня есть таблицазаказы на продажу и таблица клиентов.Каждый заказ на продажу имеет идентификатор клиента, которому будет выставлен счет, и идентификатор клиента, которому он будет отправлен (они могут быть одинаковыми, но чаще всего нет - существует связь один-ко-многим между«счет» и «груз» (например, скажем, я продаю что-то Google, «счет» будет штаб-квартирой Google в Маунтин-Вью, а «груз» - офисом Google в Женеве.)
Таким образом, у меня есть запрос, который в основном задает следующий вопрос: «Дайте мне общий объем продаж из таблицы заказов на продажу, где счет покупателя этого клиента связан с Джоном Доу, или документ получателя этого клиента связан с Джоном Доу, ноа не Билл. "
, и мой запрос довольно прост (читай: наивный)
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сек, чтобы выполнить).Я почти уверен, что есть очень простой способ извлечь подзапрос, чтобы он не дублировался, или удалить подзапросы и заменить их на объединения, я просто не знаю, как это сделать.:( С положительной стороны, это может быть легким моментом для кого-то там:)
Заранее спасибо.