我有两个表,单位和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));
答案 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 = 3
和unit_name3
没有unit_name 4
,因此在左连接中会被忽略。