Mysql 联接3表包含不存在为空

Mysql 联接3表包含不存在为空,mysql,sql,left-join,cross-join,Mysql,Sql,Left Join,Cross Join,我正在使用考勤管理web viewer,需要一些查询数据的指南 我有三张桌子: 日期清单: 雇员名单: 考勤记录: 我想查询我的数据以显示如下 例如: 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 | NU

我正在使用考勤管理web viewer,需要一些查询数据的指南

我有三张桌子:

  • 日期清单:
  • 雇员名单:
  • 考勤记录:
  • 我想查询我的数据以显示如下

    例如:

    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
    
    因此,不管考勤表上是否有数据,查询仍然会显示所有日期和pin列表,且值为空, 我对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 FIDLE上数据库的副本
    SQL Fiddle:

    考虑
    交叉联接
    对日期和用户进行排序以生成所有可能的组合,然后将带有
    左联接的考勤表带入

    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
    

    FROM date\u table d CROSS JOIN employee\u table e LEFT JOIN attent\u table a ON d.date=a.date和e.emp\u id=a.emp\u id
    选择列与
    分组依据
    列不一致。因此,即使数据库碰巧接受了这一点,这也是一个格式错误的查询。