JOIN 3表include不存在为null



我正在开发考勤管理web查看器,需要一些关于查询数据的指南

我有3张桌子:

  1. 日期列表:日期表
  2. 员工列表:员工表
  3. 考勤日志:考勤日志

我想查询我的数据以显示如下

示例:

dates      | pin | time
2020-10-01 | 1   | 08:00:00
2020-10-01 | 2   | NULL
2020-10-01 | 3   | NULL
2020-10-02 | 1   | 08:01:00
2020-10-02 | 2   | NULL
2020-10-02 | 3   | NULL
2020-10-03 | 1   | 08:03:00
2020-10-03 | 2   | NULL
2020-10-03 | 3   | NULL
2020-10-04 | 1   | NULL
2020-10-04 | 2   | NULL
2020-10-04 | 3   | NULL

所以,不管考勤表上是否没有数据,查询仍然显示所有NULL值的日期和密码列表,我对MySQL的了解有限,最多只能做JOIN查询,但结果只在日期部分正确,显示所有日期,但不能显示所有用户。

我的查询:

SELECT d.dates, a.pin, u.name, a.time
FROM att_dates AS d -- This is the table with all days
LEFT JOIN att AS a ON d.dates = a.dates
LEFT JOIN att_user u ON a.pin = u.pin
GROUP BY dates, pin
ORDER BY d.dates

这是SQL Fiddle上数据库的副本SQL Fiddle:http://sqlfiddle.com/#!9/11e1ea/2

考虑使用cross join生成日期和用户以生成所有可能的组合,然后使用left join:创建考勤表

SELECT d.dates, u.pin, u.name, a.time
FROM att_dates AS d
CROSS JOIN att_user u
LEFT JOIN att AS a ON d.dates = a.dates AND a.pin = u.pin
GROUP BY d.dates, u.pin, u.name
ORDER BY d.dates

相关内容

最新更新