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

标签 mysql sql

我有三个表: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/

相关文章:

php - MySQL,输出文件 : Is it possible to store query result into a variable instead of a file

php - 从mysql 5.5降级到5.1,utf-8 General_ci

sql - 需要 SQL 帮助 - 如何选择行来执行插入?

SQL 查询和 MS Access 查询返回不同的数据

php - Zend Framework 2 结果集按条件排序?

mysql - 如何限制 LEFT JOIN

php - 仅在分页页数查询中 : (PDO Query Error) -> server has gone away in

sqlite 根据列值创建有序分区,即密集等级()

Mysql 上一个日期

mysql - 如何在 MySQL 中使用自定义逻辑 IF 语句比较两列之间的值