SQL LEFT JOIN COUNT

时间:2014-06-17 22:04:04

标签: mysql left-join

一直在敲我的头。

我有两张桌子

雇员

  • ID
  • 名称
  • 活性
  • USER_ID

报告

  • ID
  • EMPLOYEE_ID
  • USER_ID
  • created_at
  • 以及更多

我想选择具有特定user_id的员工,并且还要添加一个列,其中包含特定年份的特定员工(employee_id)的报告计数。

这是我尝试过的,但未能成功。

SELECT c.id, c.name, c.active, c.user_id, COUNT( u.id ) no_of_reports
FROM employee c
LEFT JOIN report u ON c.id = u.employee_id
WHERE c.user_id =1
AND YEAR( u.created_at ) =  '2014'
GROUP BY c.id, c.name
ORDER BY c.name ASC 

一切正常,除非我为LEFT JOIN设置条件。如果created_at列在2014年之内,我只希望它计算u.id。这很好,但如果没有u.ids(意味着该员工没有报告),整个员工都被排除在外,而不是仅仅将no_of_reports设置为0,并且仍然在我的结果中将id,name,active和user_id作为一行给我。

删除AND YEAR(u.created_at)=' 2014'给我正确的结果,除了它包括2014年以外创建的报告。

1 个答案:

答案 0 :(得分:1)

您可以在JOIN子句中添加多个条件:

SELECT c.id, c.name, c.active, c.user_id, COUNT( u.id ) no_of_reports
FROM employee c
LEFT JOIN report u ON (c.id = u.employee_id AND YEAR( u.created_at ) =  '2014')
WHERE c.user_id =1
GROUP BY c.id, c.name
ORDER BY c.name ASC 

这将选择所有用户,但只加入2014年创建的报告