Почему это не показывает все строки в левом соединении? - PullRequest
1 голос
/ 06 июля 2011

У меня есть две таблицы, unit и 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_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 ]

4 голосов
/ 06 июля 2011

В вашем предложении WHERE указано unit_hits.week = 3 (с большим количеством скобок). Это означает, что если совпадение unit_hits не найдено, этот столбец считается NULL и, следовательно, не равен 3. Вы можете переместить его в предложение JOIN, если это действительно ваше требование.

2 голосов
/ 06 июля 2011

Это должно сделать это. Проблема в том, где вы. Просто добавьте это к вашему условию соединения.

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)
0 голосов
/ 06 июля 2011

Нет unit_hits with week = 3 для unit_name3 и unit_name 4, поэтому они игнорируются при левом соединении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...