2011-06-15 75 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條目。