如何解决JOIN 3表包含不存在为空
我正在使用考勤管理Web查看器,并且需要一些有关数据查询的指南
我有3张桌子:
- 日期列表: date table
- 员工名单:employee table
- 出勤记录:attendance log
我想查询我的数据以这样显示
示例:
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小提琴:http://sqlfiddle.com/#!9/91e1ea/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.name
ORDER BY d.dates
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。