我可能在这里有错误的一端,但我认为外连接应该给我(比如说)左表中的所有记录,以及来自右表的匹配结果和空值没有匹配的地方。
我有 3 个表需要查询。Person 和 Detail 具有直接的 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个人还没有放下时间,所以我尝试了以下outer join
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
但是,这给了我与第一个查询完全相同的结果。
编辑:我刚刚发现了问题的一部分。在伪代码的原始版本中,没有按日期闪烁。我刚刚发现删除日期过滤器查询的行为更符合预期 - 尽管太慢而无法使用,而且日期很重要。