MySQL выбрать фиктивную запись, когда условие JOIN не выполнено - PullRequest
2 голосов
/ 15 июня 2011

У меня есть две таблицы, одна запись хитов, другая таблица пользователей. Если пользователь вошел в систему, попадание записывается с идентификатором этого пользователя. Если пользователь не вошел в систему, попадание регистрируется как 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 ]

1 голос
/ 15 июня 2011

Попробуйте левое соединение и 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
0 голосов
/ 15 июня 2011

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

...