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

时间:2016-04-19 12:10:38

标签: mysql sql

我有三个表:日历,员工,任务。 员工通常在一周内完成任务,并且在周末期间不工作。我想要完成的是加入表格,这样即使没有员工完成任务,我也会在一年中看到每一天。

这是一个适合我的SQL:

aboutMenuItem.enabled = true

结果如下:

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"))消失了。

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这里的另一个答案是对的。将内部联接转为左联接以返回没有员工的日期

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

答案 2 :(得分:0)

请记住修复该日期;

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";