#mysql #sql #left-join
#mysql #sql #слева-объединение
Вопрос:
Как наилучшим / быстрым способом рассчитать баланс запасов для миллионов записей с помощью следующих 3 таблиц?!
По моему опыту, использование join может занять менее 0,1 секунды, но не конечный результат,
используя union, можно получить конечный результат, но это занимает 1x сек…
stocktable stid productid кол-во 1 1 100 2 2 200 sellstable количество проданных таблиц 1 1 50 2 1 30 scraptable scrapid stid кол-во 1 1 10 2 1 5 3 2 100
SELECT
a.stid,
qty,
sellid,
b.qty,
scrapid,
c.qty
FROM
stocktable AS a
LEFT JOIN sellstable AS b ON a.stid = b.stid
LEFT JOIN scraptable AS c ON a.stid = c.stid
1 100 1 50 1 10 1 100 1 50 1 5 1 100 2 30 1 10 1 100 2 30 1 5 2 200 null null 3 100
это быстро при использовании join для внутреннего запроса, но как подвести баланс…
добавлена информация:
результат должен быть 1 5 2 100
Спасибо!
Комментарии:
1. Как вы можете получить баланс без цены?
2. привет, спасибо за комментарий. в порядке только количество баланса!
Ответ №1:
Если вам буквально нужны все столбцы в вашем запросе вместе с суммой трех полей qty, тогда вы можете сделать SUM(a.qty b.qty c.qty)
, но трудно точно определить, что вы ищете. Есть ли определенный ключ в этих таблицах, который вы хотите сгруппировать? Нужны ли вам sellid и scrapid вообще?
Комментарии:
1. Привет, muffinista, я думаю, что sellid и scrpid не нужны для этого запроса. Я также пытался добиться успеха, используя подзапрос для каждого требуемого поля, но я думаю, что использование JOIN должно быть быстрым способом … но как это сделать?!
2. Верны ли ваши значения в ожидаемых результатах выше? Я не понимаю, как количество для stid = 1 может быть 5, но, возможно, я что-то упускаю.