我有三个表:Calendar、Employees、Task。 员工通常在工作日完成任务,周末不工作。我想要完成的是加入表格,这样即使没有员工完成任何任务,我也能看到一年中的每一天。
这是一个适用于我的 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";
结果如下所示:
Date Task Name
...
2016-01-05 Driving John
2016-01-05 Cooking Rob
2016-01-06 Installing Jane
2016-01-07 null null
我的问题是,当我将员工添加到 WHERE
子句中时 (WHERE e.name in("John", "Rob", "Jane")
) ,最后一行 (2016-01-07 null null
) 消失。
我应该更改什么以保留结果中没有员工和任务的日期?我需要这些日期来记录最终报告。
最佳答案
这里的另一个答案是正确的。然后将内部联接变成左联接以返回没有员工的天数
WHERE c.date between "2016-01-01" and "2016-01-07"
AND (e.name in("John", "Rob", "Jane") or e.name is null)
关于mysql - 如何连接表以查看具有空值的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36717981/