我有三个表:日历,员工,任务。 员工通常在一周内完成任务,并且在周末期间不工作。我想要完成的是加入表格,这样即使没有员工完成任务,我也会在一年中看到每一天。
这是一个适合我的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")
)消失了。
我应该更改什么来保持结果中没有员工和任务的日期?我需要这些日期来保留最终报告。
答案 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";