MySQL Left Join + Где проблема - PullRequest
       13

MySQL Left Join + Где проблема

4 голосов
/ 15 февраля 2011

У меня есть таблица Users: id, тип, имя

и таблица Articles: id, writer_id, status

, где article.writer_id = users.id.

Я хотел бы отобразить таблицу с именем каждого пользователя, ГДЕ type = 'writer', а также количество статей, связанных с ними, которые имеют статус = 'назначен'.

Пока у меня есть:

SELECT u.name, COUNT(a.id) as count 
FROM users u LEFT OUTER JOIN articles a 
ON a.writer_id = u.id 
WHERE u.type = 'writer' AND a.status = 'assigned' 
GROUP BY u.name

Проблема в том, что это не отображает авторов с 0 связанными с ними статусными статьями.Я почти уверен, что мне нужен подзапрос, но я не уверен, что делать.Заранее спасибо!

1 Ответ

10 голосов
/ 15 февраля 2011

Поскольку вы используете LEFT JOIN, переместите предикат a.status = 'assigned' из предложения WHERE в предложение JOIN.

SELECT u.name, COUNT(a.id) as count 
FROM users u LEFT OUTER JOIN articles a 
  ON a.writer_id = u.id
  AND a.status = 'assigned' 
WHERE u.type = 'writer' 
GROUP BY u.name

Объяснение: Для тех пользователей, у которых нет статьи, a.status будет NULL. Оставление предиката в WHERE лишает смысла ЛЕВНОЕ соединение, поскольку NULL = 'assigned' оценивается как ложное.

...