Используйте left join
s и поместите таблицу туда, где вы хотите сохранить все строки первыми - это будет user
.Условия в этой таблице могут быть отфильтрованы в предложении where
.
Условия для всех других таблиц должны быть указаны в предложении on
:
SELECT d.operator_id as num_carteira, u.name_carteira as Carteira,
sum(d.`value`) AS Valor, sum(d.`quantity`) AS Qtde
FROM user u LEFT JOIN
daily_productivity d
ON d.operator_id = u.id AND
d.date >= '2019-06-01' AND
d.date < '2019-07-01' AND
d.daily_productivity_status_id = 2 LEFT JOIN
product p
ON d.product_id = p.id AND p.mobilizador_id = 1
WHERE u.role_id = 6
GROUP BY d.operator_id, u.name_carteira
ORDER BY u.name_carteira;
Это предполагает, что date
приходитиз таблицы daily_productivity
.
Обратите внимание, что я изменил логику даты, чтобы она была более совместимой с индексами.Я бы также рекомендовал использовать u.id
вместо d.operator_id
в SELECT
, поскольку последний может быть NULL
.
Если вы действительно хотите, чтобы все пользователи в user
, удалили where
пункт.