2011-02-10 58 views
2

这是我当前的SQL查询SQL留下了那里混乱

SELECT 
    urls.short, 
    urls.long, 
    urls.user, 
    dates.date AS date, 
    COUNT(views.short) AS views, 
    SUM(views.money) AS money 
FROM dates 
LEFT JOIN views ON dates.date = views.date 
LEFT JOIN urls ON views.short = urls.short 
WHERE urls.user='test' 
GROUP BY dates.date, views.date 
LIMIT 0, 20 

它显示的结果是这样的连接:

2011-02-08测试测试1 0.003

2011 -02-09 test test 6 0.016

但是w母鸡我删除

WHERE urls.user='test' 

我得到

2011-02-05 0

2011-02-06 0

2011-02-07 44kc http://google.com 27 0.031

2011-02-08 44kc http://google.com 15 0.045

2011-02-09试验测试12 0.032

2011-02-10 0

所以最后我想用第一查询,以获得第二查询结果(在没有任何可用的情况下显示0)。 那么最新的解决方案?

回答

10

我不知道如果我正确地理解你的问题,但你可能要考虑

LEFT JOIN urls ON views.short = urls.short AND urls.user='test' 
+2

这是正确的。 LEFT JOIN工作正常,但WHERE子句是基于从可选连接的表中引入的列限制行,从而排除未连接的行。将逻辑移至连接条件可修复此问题。 – 2011-02-10 11:44:42