SQLite3 Simulate RIGHT OUTER JOIN с LEFT JOINs и UNION

У меня есть следующий оператор выбора, в котором мне нужно суммировать каждую задачу из таблицы 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. Что я делаю неправильно? Есть ли лучший способ достичь моей цели?

8
задан John Woo 5 February 2012 в 05:05
поделиться