MySQL где ИЛИ имея - PullRequest
       43

MySQL где ИЛИ имея

2 голосов
/ 26 апреля 2011

У меня есть таблица пользователей, у некоторых из которых есть статьи, связанные с ними, а у некоторых - type = writer. Я хотел бы отобразить всех пользователей, у которых есть статьи ИЛИ, у которых есть type = writer. Таким образом, должны отображаться все авторы, а другие типы пользователей отображаются только при наличии статей.

Пока это мой запрос, который не включает авторов без статей.

SELECT u.name, u.type, COUNT(a.id) count
FROM users u
LEFT JOIN articles a on u.id = a.writer_id
GROUP BY u.name
HAVING count > 0

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

WHERE u.type = 'writer'

Нужно ли делать СОЮЗ из этих двух наборов результатов?

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

Я думаю, вы ищете что-то вроде этого

SELECT 
  u.name, 
  u.type, 
  COUNT(a.id) count
FROM users u
LEFT JOIN articles a ON u.id = a.writer_id
WHERE 
  u.type='writer' --all users that are writers
  OR 
  a.writer_id IS NOT NULL  --all users that have at least one article
GROUP BY 
  u.name
--removed the having clause as it seems it may be possible that a writer has no articles.
2 голосов
/ 26 апреля 2011

Просто измените предложение WHERE, чтобы разрешить любому пользователю, у которого есть соответствующая запись статьи:

SELECT u.name, u.type, COUNT(a.id) count
FROM users u
LEFT JOIN articles a on u.id = a.writer_id
WHERE u.type = 'writer' OR a.writer_id IS NOT NULL
GROUP BY u.name
HAVING count > 0
...