当JOIN条件不满足时,mysql选择虚拟记录

时间:2011-06-15 18:00:38

标签: mysql join dummy-data

我有两个表,一个是命中记录,另一个是用户表。如果用户登录,则使用该用户的ID记录匹配。如果用户未登录,则匹配将记录为user_id = 0

当我运行报告时,我想在针对users表的JOIN中加入以获取用户名 - 但是没有ID为0的用户,所以我得到了错误的数据(例如,没有结果所有非登录命中)。有没有办法选择像“Guest”这样的虚拟用户名,其中不符合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 个答案:

答案 0 :(得分:1)

尝试左连接和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

答案 1 :(得分:0)

你需要做一个LEFT OUTER JOIN;这将返回在用户表中用户不存在的hits表中具有user_id条目的记录。