У меня есть следующий оператор выбора, в котором мне нужно суммировать каждую задачу из таблицы tbTasks и сгруппировать их по идентификатору проекта из таблицы tbProjects, чтобы получить такую запись:
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
Это работает и выполняется нормально, но с одной проблемой: если у проекта нет связанной с ним задачи, я не получаю никакой записи (где я хочу получить projectId, projectName и 0 или NULL для totalTime) . Итак, чтобы правильно присоединиться к таблице, 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. Что я делаю неправильно? Есть ли лучший способ достичь моей цели?