mysql выбирает фиктивную запись, когда условие JOIN не выполняется

У меня есть две таблицы, одна запись просмотров, другая пользовательская таблица. Если пользователь вошел в систему, обращение записывается с идентификатором этого пользователя. Если пользователь не вошел в систему, попадание регистрируется как user_id = 0.

Когда я запускаю отчет, я хочу ПРИСОЕДИНИТЬСЯ к обращениям к таблице пользователей, чтобы получить имя пользователя, но нет пользователя с идентификатором 0, поэтому я возвращаю неверные данные (например, нет результатов для всех незарегистрированных обращений). ). Есть ли способ выбрать фиктивное имя пользователя, например «Гость», где условие ПРИСОЕДИНЕНИЯ не выполняется?

Вот запрос:

SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id, b.username
FROM hits a
JOIN users b ON a.user_id = b.id
WHERE 1

person julio    schedule 15.06.2011    source источник


Ответы (2)


Попробуйте левое соединение и COALESCE по умолчанию

SELECT DATE_FORMAT(a.timestamp, '%Y-%m-%d') date, count(a.*) hits, a.user_id,
  COALESCE( b.username, 'GUEST')
FROM hits a
LEFT JOIN USERS b ON a.user_id = b.id
person Conrad Frix    schedule 15.06.2011
comment
@julio. Нет проблем, вы также можете использовать IFNULL вместо этого - person Conrad Frix; 15.06.2011

Вам нужно сделать LEFT OUTER JOIN; это вернет вам записи с записью user_id в таблице совпадений, где пользователь не существует в таблице пользователей.

person Paul Sonier    schedule 15.06.2011