Как ограничить объединение, когда вторая таблица может не иметь соответствующих строк - PullRequest
0 голосов
/ 29 июля 2009

У меня есть две таблицы в базе данных MySQL, курсы и сессии. Я пытаюсь суммировать записи в сессиях для каждого курса каждый месяц.

Я могу суммировать общее количество сеансов для каждого курса, без проблем, используя этот запрос:

   SELECT courses.CourseID, 
    SUM(IF( sessions.Duration IS NULL , 0, sessions.Duration)) AS Hrs
    FROM courses
    LEFT JOIN sessions ON courses.CourseID = sessions.CourseID
    WHERE courses.TrainerID = 113
    GROUP BY courses.CourseID

Проблема в том, что не во всех курсах есть сессии, поэтому, если я попытаюсь ограничить запрос, добавив его после предложения WHERE:

AND sessions.SessionDate >= '2009-06-01' AND sessions.SessionDate <= '2009-06-30'

Я получаю только курсы с сессиями, но я хочу, чтобы курсы без сессий показывали 0.

Надеюсь, это имеет смысл.

Кто-нибудь может помочь? Спасибо.

1 Ответ

2 голосов
/ 29 июля 2009

добавить предикат к условию соединения ...

 SELECT courses.CourseID,     
     SUM(IF( sessions.Duration IS NULL , 0, sessions.Duration)) AS Hrs    
 FROM courses  
    LEFT JOIN sessions 
     ON courses.CourseID = sessions.CourseID
         And sessions.SessionDate 
              Between '2009-06-01' And '2009-06-30'   
 Where courses.TrainerID = 113    
 GROUP BY courses.CourseID

Кроме того, MySql имеет оператор Coalesce? Если это так, вы можете изменить на:

 SELECT courses.CourseID,     
     SUM(Coalesce(sessions.Duration, 0)) AS Hrs    
 FROM courses  
    LEFT JOIN sessions 
     ON courses.CourseID = sessions.CourseID
         And sessions.SessionDate 
              Between '2009-06-01' And '2009-06-30'   
 Where courses.TrainerID = 113    
 GROUP BY courses.CourseID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...