LEFT JOIN с GROUP BY не возвращает ожидаемый LEFT JOIN результат - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь получить все свои накопленные продажи для каждого магазина, даже если значение равно нулю (нет порядка для условий), но LEFT JOIN дает только те строки, которые имеют соответствие, что мне не подходит:

SELECT s.identifierExt as StoreID, 
YEAR(o.creation) AS Year,
MONTHNAME(o.creation) AS Month,
MONTH(o.creation) AS IDMonth,
ROUND(SUM(o.price), 2) AS Sales
FROM store s
LEFT JOIN order o ON o.store = s.id 
AND (o.creation < '2018-09-13 00:00:00') 
AND (o.place NOT IN ('PENDING','CANCELLED')) 
AND (o.creation > '2018-01-12 00:00:00')
GROUP BY Year, Month, StoreID
ORDER BY IDMonth, StoreID ASC

Заранее спасибо.

1 Ответ

0 голосов
/ 16 апреля 2019

Возможно, это связано с разницей между объединениями INNER и OUTER. Внутреннее соединение требует, чтобы была соответствующая строка (соответствует условию соединения), внешнее соединение не имеет такого требования: оно будет возвращать столбцы с NULL.

Кажется, вы хотите присоединиться к OUTER:

SELECT s.identifierExt as StoreID, 
YEAR(o.creation) AS Year,
MONTHNAME(o.creation) AS Month,
MONTH(o.creation) AS IDMonth,
ROUND(SUM(o.price), 2) AS Sales
FROM store s
LEFT OUTER JOIN order o ON o.store = s.id 
AND (o.creation < '2018-09-13 00:00:00') 
AND (o.place NOT IN ('PENDING','CANCELLED')) 
AND (o.creation > '2018-01-12 00:00:00')
GROUP BY Year, Month, StoreID
ORDER BY IDMonth, StoreID ASC

Таким образом, вы также получите магазины без заказов.

Также см. этот ответ о разнице между внутренними и внешними объединениями

...