JOIN 3 Table 包括不存在的 null
JOIN 3 Table include not existing as null
我正在研究考勤管理 Web 查看器,需要一些有关查询数据的指南
我有 3 个 table:
- 日期列表:
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
所以,如果没有考勤数据也没关系table,查询仍然显示所有日期和引脚列表为 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/91e1ea/2
考虑 cross join
日期和用户生成所有可能的组合,然后将出席人数 table 与 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
我正在研究考勤管理 Web 查看器,需要一些有关查询数据的指南
我有 3 个 table:
- 日期列表: 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
所以,如果没有考勤数据也没关系table,查询仍然显示所有日期和引脚列表为 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/91e1ea/2
考虑 cross join
日期和用户生成所有可能的组合,然后将出席人数 table 与 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