次のselectステートメントがあり、テーブルtbTasksから各タスクを合計し、テーブルtbProjectsからprojectIdでグループ化して、次のようなレコードを取得する必要があります。
ProjectID = 1, ProjectName = 'My Project', TotalTime = 300 //<--sum of each task time
クエリは次のようになります。
SELECT tbTasks.projectId,
SUM(tbTasks.taskTime) AS totalTime,
tbProjects.projectName
FROM tbTasks
INNER JOIN tbProjects ON tbTasks.projectId = tbProjects.projectId
GROUP BY tbTasks.projectId
ORDER BY tbProjects.created DESC
これは正常に機能して実行されますが、1つの問題として、プロジェクトにタスクが関連付けられていない場合、レコードがまったく返されません(projectId、projectName、およびtotalTimeの0またはNULLを取得する場合)。したがって、テーブルに正しく結合するために、tbProjects SQLite3は、ラウンドアバウトの方法でそれを実行するように強制します。
SELECT tbTasks.projectId,
SUM(tbTasks.taskTime) AS totalTime,
tbProjects.projectName
FROM tbTasks LEFT OUTER JOIN tbProjects
ON tbTasks.projectId = tbProjects.projectId
GROUP BY tbTasks.projectId
UNION
SELECT tbProjects.projectId,
SUM(tbTasks.taskTime) AS totalTime,
tbProjects.projectName
FROM tbProjects LEFT OUTER JOIN tbTasks
ON tbProjects.projectId = tbTasks.projectId
GROUP BY tbTasks.projectId
ORDER BY tbProjects.created DESC
これだけは機能しません。SQL構文エラーが発生します。私は何が間違っているのですか?私の目標を達成するためのより良い方法はありますか?