多表外连接问题

时间:2010-07-21 14:21:16

标签: mysql outer-join

我可能在这里有错误的结尾,但我认为外部联接应该给我所有(左)表中的记录以及右表中的匹配结果,以及没有匹配的空值。

我需要查询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

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

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

1 个答案:

答案 0 :(得分:1)

查看Jeff Atwood's visual guide to JOINs并查看是否可以让自己理顺。