【问题标题】:Left outer join in SQL with data missing in right tableSQL中的左外连接,右表中缺少数据
【发布时间】:2016-11-14 07:26:53
【问题描述】:

我在 Mysql 数据库中有以下数据库架构

用户

  • 身份证
  • 姓名

出席率

  • 身份证
  • user_id
  • checked_on(日期)

现在,对于给定的日期范围,我想构建一个报告,列出用户和另一列,说明他们当天是否在场。

我试图通过以下查询使用左外连接来完成它

select * from users left outer join attendance on users.id = attendance.user_id where users.id in (11, 12);

如何修改上面的查询,以便得到报告?

【问题讨论】:

  • 添加一些示例数据和预期结果。

标签: mysql join left-join


【解决方案1】:

您可以使用如下查询:

select u.*, 
       IF(a.id IS NOT NULL, 'Present', 'Not Present') AS IsPresent 
from users u
left outer join attendance a
   on u.id = a.user_id and a.checked_on = ?
where u.id in (11, 12);

【讨论】:

  • 当我在条件中给出一个日期时,这有效。但是,当我在a.checked_on >= '2016-07-01' and a.checked_on <= '2016-07-15' 这样的条件中包含日期范围时,它只会打印用户签入的行。有没有办法让它也适用于日期范围?
  • @Sudar 是的,只在ON 子句中包含谓词a.checked_on >= '2016-07-01' and a.checked_on <= '2016-07-15',在WHERE 中包含
猜你喜欢
  • 1970-01-01
  • 2020-12-10
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-10
  • 2014-02-24
相关资源
最近更新 更多