0

我可能在这里有错误的一端,但我认为外连接应该给我(比如说)左表中的所有记录,以及来自右表的匹配结果和空值没有匹配的地方。

我有 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

但是,这给了我与第一个查询完全相同的结果。

编辑:我刚刚发现了问题的一部分。在伪代码的原始版本中,没有按日期闪烁。我刚刚发现删除日期过滤器查询的行为更符合预期 - 尽管太慢而无法使用,而且日期很重要。

4

1 回答 1

1

查看Jeff Atwood 的 JOIN 视觉指南,看看您能否理顺自己。

于 2010-07-21T14:22:45.497 回答