我可能在这里有错误的结尾,但我认为外部联接应该给我所有(左)表中的记录以及右表中的匹配结果,以及没有匹配的空值。
我需要查询3个表。人与细节有直接的1:1关系。第三个表是时间。这样可以按每个项目每周每周工作的小时数。我需要计算每个人所用的周数。
以下为我提供了每个用户将时间缩短到的周数,只要他们放下了> 1周
SELECT name, detail.clock, COUNT(DISTINCT(week))
FROM person, detail,
WHERE person.ref = detail.person
AND detail.clock = time.clock
WHERE time.week >= "2010-07-01"
GROUP BY detail.clock
即。这将显示已经进入时间的80/100人。
但是我需要看到那些尚未放下时间的20个人,所以我尝试了下面的外连接
SELECT name, detail.clock, COUNT(DISTINCT(week))
FROM person LEFT OUTER JOIN detail ON person.ref = detail.person
LEFT OUTER JOIN time ON detail.clock = time.clock
WHERE time.week >= "2010-07-01"
GROUP BY detail.clock
然而,这给了我与第一个查询完全相同的结果。
编辑:我刚刚发现了部分问题。在伪代码的原始版本中,按日期没有闪烁。我刚刚发现删除日期过滤器,查询的行为更符合预期 - 虽然太慢而无法使用,日期很重要。