【问题标题】:SQL LEFT JOIN COUNTSQL 左连接计数
【发布时间】:2014-08-08 01:40:22
【问题描述】:

一直在用这个敲我的头。

我有两张桌子

员工

  • 身份证
  • 姓名
  • 有效
  • user_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 年之外创建的报告。

【问题讨论】:

  • 你考虑过子查询吗?

标签: mysql left-join


【解决方案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 年创建的报告

【讨论】:

    猜你喜欢
    • 2011-01-14
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 2019-05-19
    • 2018-08-21
    • 2016-10-02
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多