2011-06-15 37 views
2

我有两个表,一个是命中记录,另一个是用户表。如果用户登录,则用该用户的ID记录命中。如果用户没有登录,点击记录为user_id = 0当JOIN条件不符合时mysql选择虚拟记录

当我运行一个报告时,我想加入点击用户表来获取用户名 - 但没有用户ID 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 

回答

1

尽量左连接并凝聚为默认

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

感谢您的快速和明确的帮助! – julio 2011-06-15 18:16:47

+0

@julio。没问题,您也可以使用[IFNULL](http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull) – 2011-06-15 18:23:07

0

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