mysql вычисляет две соответствующие строки из разных таблиц

0

У меня есть две таблицы, одна с количеством поставок в разные магазины в зависимости от дня недели. Как это:

stores
store-n | mon | tue
store 1 | 0   | 2
store 2 | 1   | 1

И там, где показано, какая часть продукта поставляется. Как это:

quantum
store-n | p1 | p2 |
store 1 | 20 | 15 |
store 2 | 5  | 8  |

Мне нужно показать, сколько отдельного продукта должно быть доставлено в определенный день в каждый магазин.
Как это:

Count of p1 on monday:
store-n | p1*mon |
store 1 | 0      |
store 2 | 5      |

Count of p2 on tuesday:
store-n | p2*tue |
store 1 | 30     |
store 2 | 8      |

Таким образом, количество продуктов умножается на количество посылок для каждого магазина. Я пробовал этот запрос:
SELECT stores.store-n, (quantum.p1 * stores.mon) FROM quantum, stores
Но, кажется, он умножает 1-ю строку одной таблицы на каждую строку в другой, затем на следующую и так далее. Каков правильный способ сделать это?
А также в конце мне нужна сумма столбца результата.

Теги:

2 ответа

3
Лучший ответ

В вашем запросе отсутствует условие соединения, что приводит к перекрестному соединению между вашими двумя таблицами. Мы могли бы исправить исходный запрос, но лучше было бы написать его с помощью явных объединений:

SELECT
    s.'store-n',
    q.p1 * s.mon AS p1_cnt,
    q.p2 * s.tue AS p2_cnt
FROM stores s
INNER JOIN quantum q
    ON s.'store-n' = q.'store-n';
0
SELECT (store.mon * quantum.p1) AS 'p1*mon', (store.tue * quantum.p2) AS 'p2*tue' 
FROM 'store' 
LEFT JOIN quantum 
ON store.store_n = quantum.store_n
  • 0
    Спасибо за этот фрагмент кода, который может оказать некоторую ограниченную, немедленную помощь. Правильное объяснение значительно улучшило бы его долгосрочную ценность, показав, почему это хорошее решение проблемы, и сделало бы его более полезным для будущих читателей с другими, похожими вопросами. Пожалуйста, измените свой ответ, чтобы добавить некоторые объяснения, в том числе предположения, которые вы сделали.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню