sql离开加入哪里有困惑

cut*_*ute 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
Run Code Online (Sandbox Code Playgroud)

它显示的结果如下:

2011-02-08测试1 0.003

2011-02-09测试测试6 0.016

但是当我删除

WHERE urls.user='test'
Run Code Online (Sandbox Code Playgroud)

我明白了

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).那么解决方案是什么?

Osw*_*ald 10

我不确定我是否正确理解了您的问题,但您可能需要考虑

LEFT JOIN urls ON views.short = urls.short AND urls.user='test'
Run Code Online (Sandbox Code Playgroud)

  • 这是对的.LEFT JOIN工作正常,但WHERE子句然后根据从可选联接表引入的列限制行,从而排除未连接的行.将逻辑移动到连接条件可以解决此问题. (2认同)