一直在敲我的头。
我有两张桌子
我想选择具有特定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年以外创建的报告。
答案 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年创建的报告