0

我需要获取系统上每个项目中属于用户的任务数。这些表是:

项目:ID、名称

任务:ID、ProjectID、Assignee(用户)

现在我正在做这个查询:

SELECT Projects.ID, Projects.Name, COUNT(*) 
FROM Tasks JOIN Projects ON Tasks.ProjectID = Projects.ID 
WHERE Assignee=1 GROUP BY Projects.ID;

仅部分有效。IT 返回任务的数量,但仅针对已分配给用户的任务的项目。我希望查询返回系统中的所有项目,即使没有分配任务。

我怎样才能做到这一点?

谢谢!

4

3 回答 3

3

改为使用LEFT JOIN

LEFT JOIN操作不同于INNER JOIN. 它的作用是返回左侧表中的所有记录,即右侧表是否有Projects匹配项。Tasks

SELECT  Projects.ID, Projects.Name, COUNT(Tasks.ProjectID) 
FROM    Projects  
        LEFT JOIN Tasks 
            ON Tasks.ProjectID = Projects.ID AND
                Assignee=1
GROUP   BY Projects.ID;

要进一步了解有关联接的更多信息,请访问以下链接:

于 2013-04-10T12:06:18.300 回答
0

如果您需要所有需要的项目,RIGHT OUTER JOIN而不是JOIN

SELECT Projects.ID, Projects.Name, COUNT(Projects.ID) 
FROM Tasks RIGHT OUTER JOIN Projects 
ON Tasks.ProjectID = Projects.ID 
AND Assignee=1 GROUP BY Projects.ID;
于 2013-04-10T12:06:02.893 回答
0

试试这个

SELECT Projects.ID, Projects.Name, COUNT(*) 
FROM Projects JOIN Tasks ON Tasks.ProjectID = Projects.ID 
WHERE Assignee=1 GROUP BY Projects.ID;
于 2013-04-10T12:09:50.370 回答