为什么这不显示左连接中的所有行?

时间:2011-07-06 14:41:52

标签: sql ms-access

我有两个表,单位和unit_hits。表格单位显示所有可用主题。

id | unit_name    
1  | unit_name1
2  | unit_name2
3  | unit_name3
4  | unit_name4

表unit_hits显示在给定周内命中的任何主题。

id | unit_name   | hit_count  | week
1  | unit_name1  | 1          | 3
2  | unit_name2  | 5          | 3 

我想通过左连接我可以列出表单位中的所有unit_names,然后根据它的周来列出unit_hits中的hit_count。

所以我的结果会或者应该是这样的:

unit_name  | hit_count
unit_name1 | 1
unit_name2 | 5
unit_name3 | 
unit_name4 | 

但不幸的是,我正在使用的查询不是这种情况。它只显示unit_name1和unit_name2,因为它在第3周有一个命中计数。我认为这是由WHERE子句引起的,但我无法弄明白。有什么想法吗?

SELECT units.unit_name, unit_hits.unit_name, unit_hits.hit_count
FROM units LEFT JOIN [unit_hits] ON units.unit_name = unit_hits.unit_name
WHERE (((unit_hits.week)=3));

3 个答案:

答案 0 :(得分:4)

unit_hits.week = 3子句中有WHERE(括号过多)。这意味着如果找不到unit_hits匹配,则该列被视为NULL,因此不等于3.如果这是您的实际要求,可以将其移至JOIN子句是

答案 1 :(得分:2)

这应该这样做。问题是你的where子句。只需将其添加到您的加入条件中即可。

SELECT 
units.unit_name, 
unit_hits.unit_name, 
unit_hits.hit_count
FROM units 
LEFT JOIN [unit_hits] ON (units.unit_name = unit_hits.unit_name AND unit_hits.week=3)

答案 2 :(得分:0)

unit_hits with week = 3unit_name3没有unit_name 4,因此在左连接中会被忽略。