Mysql 如何连接表以查看具有空值的日期?

Mysql 如何连接表以查看具有空值的日期?,mysql,sql,Mysql,Sql,我有三张桌子:日历、员工、任务。 员工通常在一周内完成任务,周末不工作。我想完成的是加入表格,这样即使没有员工完成任何任务,我也能看到一年中的每一天 下面是一个适合我的sql: SELECT c.date, t.task, e.name FROM calendar c LEFT JOIN tasks t ON (c.date = t.date) INNER JOIN employees e ON (t.emp_id = e.id) WHERE c.date >= "2016-01-

我有三张桌子:日历、员工、任务。 员工通常在一周内完成任务,周末不工作。我想完成的是加入表格,这样即使没有员工完成任何任务,我也能看到一年中的每一天

下面是一个适合我的sql:

SELECT c.date, t.task, e.name
FROM calendar c
  LEFT JOIN tasks t ON (c.date = t.date)
  INNER JOIN employees e ON (t.emp_id = e.id)
WHERE c.date >= "2016-01-01" AND c.date <= "2016-01-07";
我的问题是,当我在
WHERE
子句(
WHERE e.name in(“John”、“Rob”、“Jane”)
中添加员工时,最后一行(
2016-01-07 null
)消失


我应该改变什么来保留结果中没有员工和任务的日期?我需要这些日期来保存最终报告。

将员工的内部联接更改为左联接,并将名称筛选器放在联接子句中,而不是where子句中。

这里的另一个答案是正确的。将内部联接转换为左联接以返回没有员工的天数

WHERE c.date between "2016-01-01" and "2016-01-07"
AND (e.name in("John", "Rob", "Jane") or e.name is null)

记住确定日期

SELECT c.DATE
    ,t.task
    ,e.NAME
FROM calendar c
LEFT JOIN tasks t ON (c.DATE = t.DATE)
LEFT JOIN employees e ON t.emp_id = e.id
    AND e.NAME IN ('John' ,'Rob','Jane')
WHERE c.DATE >= "2016-01-01"
    AND c.DATE <= "2016-01-07";
选择c.DATE
,t.任务
,e.NAME
从日历c
左连接任务t打开(c.DATE=t.DATE)
在t.emp_id=e.id上左键连接雇员e
和e.NAME在('John','Rob','Jane')
其中c.日期>=“2016-01-01”

为什么是那个奇怪的日期?(
…和c.date我不相信此查询可以返回上述结果。感谢您的评论,我在DateThank中修复了当年的打字错误。谢谢,我不知道我可以修改左侧联接以包含查询的筛选器。这意味着,这也可以工作。
SELECT c.DATE
    ,t.task
    ,e.NAME
FROM calendar c
LEFT JOIN tasks t ON (c.DATE = t.DATE)
LEFT JOIN employees e ON t.emp_id = e.id
    AND e.NAME IN ('John' ,'Rob','Jane')
WHERE c.DATE >= "2016-01-01"
    AND c.DATE <= "2016-01-07";