2009-07-29 14 views
0

私は、MySQLデータベースの2つのテーブル、コース、セッションを持っています。毎月各コースのセッションのエントリーを要約しようとしています。2番目のテーブルに関連する行がない場合の結合を制限する方法

私は、各コースの合計セッション数をまとめることができ、このクエリを使用しても問題:

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 

は問題はありませんすべてのコースがセッションを持っているということではありませんので、私は後にこれを追加することによって、のようなクエリを制限しようとした場合私はセッションのみを持っているコースを取得

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

、しかし私が欲しいのは0

を示すために、セッションのないコースである私は、SEを作る願っています:WHERE句nse。

誰でも手助けできますか?ありがとう。

答えて

2

が結合条件に述語を追加...

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は合体演算子を持っているのですか?その場合は、次のように変更できます。

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 
関連する問題