запрос mysql для 3 таблиц, объединение или какая из них лучше всего подходит для расчета баланса?

#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, но, возможно, я что-то упускаю.