mysql выбирает фиктивную запись, когда условие JOIN не выполняется
У меня есть две таблицы, одна запись хитов, другая таблица пользователей. Если пользователь вошел в систему, попадание записывается с идентификатором этого пользователя. Если пользователь не вошел в систему, попадание регистрируется как user_id = 0
Когда я запускаю отчет, я хочу присоединиться к попаданиям в таблицу пользователей, чтобы получить имя пользователя, но нет пользователя с идентификатором 0, поэтому я получаю неверные данные (например, нет результатов для всех незарегистрированных обращений)). Есть ли способ выбрать фиктивное имя пользователя, например "Гость", где условие JOIN не выполняется?
Вот запрос:
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
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
Вы должны сделать левое внешнее соединение; это вернет вам записи, которые имеют запись user_id в таблице совпадений, где пользователь не существует в таблице пользователей.