Друг попросил меня о помощи в построении запроса, который показал бы, сколько частей каждой модели было продано в каждый день месяца, показывая нули, когда никакие части не были проданы для конкретной модели на в определенный день, даже если в тот день в любой момент не будут проданы никакие модели. Я придумал запрос ниже, но он работает не так, как ожидалось. Я только получаю записи для проданных моделей, и я не знаю, почему.Взаимодействие влево и вправо
select days_of_months.`Date`,
m.NAME as "Model",
count(t.ID) as "Count"
from MODEL m
left join APPLIANCE_UNIT a on (m.ID = a.MODEL_FK and a.NUMBER_OF_UNITS > 0)
left join NEW_TICKET t on (a.NEW_TICKET_FK = t.ID and t.TYPE = 'SALES'
and t.SALES_ORDER_FK is not null)
right join (select date(concat(2009,'-',temp_months.id,'-',temp_days.id)) as "Date"
from temp_months
inner join temp_days on temp_days.id <= temp_months.last_day
where temp_months.id = 3 -- March
) days_of_months on date(t.CREATION_DATE_TIME) =
date(days_of_months.`Date`)
group by days_of_months.`Date`,
m.ID, m.NAME
Я создал временные таблицы temp_months
и temp_days
для того, чтобы получить все дни в течение любого месяца. Я использую MySQL 5.1, но я пытаюсь сделать запрос ANSI-совместимым.
Вам не нужно вводить специальные соединения. Я не слишком хорошо знаком с mysql, но в sql-сервере, если вы не учитываете внутренний/внешний, он по умолчанию является внутренним. –
@dan s: LEFT и RIGHT подразумевают OUTER. – Quassnoi
Это решило мою проблему. Большое спасибо! –