Mysql计数分组依据和左连接未按预期工作

Mysql计数分组依据和左连接未按预期工作,mysql,group-by,left-join,Mysql,Group By,Left Join,下面是一个简单的点击跟踪器查询。我看过很多其他的帖子,我都抓狂了。我无法使此查询正常工作,因此无法显示日历表中的所有行(每行一个日历日): SELECT DATE_FORMAT(calendar_date, '%a %D') AS calendar_date, count( tracker_id ) as clicks FROM calendar LEFT JOIN offer_tracker USING(calendar_id) WHERE calendar_month = Month

下面是一个简单的点击跟踪器查询。我看过很多其他的帖子,我都抓狂了。我无法使此查询正常工作,因此无法显示日历表中的所有行(每行一个日历日):

SELECT DATE_FORMAT(calendar_date, '%a %D') AS calendar_date, 
count( tracker_id ) as clicks
FROM calendar
LEFT JOIN offer_tracker USING(calendar_id)
WHERE 
  calendar_month = Month(CURDATE()) AND 
  calendar_year = Year(CURDATE()) AND ( offer_id = 4 OR offer_id IS NULL )
GROUP BY calendar_date;
它几乎就在那里,但并不是日历表中的所有行都被返回,即没有星期五2日、星期二6日、星期三7日等:


有人知道我哪里出了问题吗?我应该使用子查询吗?

我猜
报价id
来自
报价跟踪程序
表。当您有一个(左)外部联接,并且在
WHERE
条件中使用右表中的字段时(如您的
offer\u id=4
),联接实际上被取消,并给出与内部联接相同的结果

取消取消的尝试(
offer\u id=4或offer\u id为NULL
)无法按预期工作。
offer\u tracker
中具有
offer\u id 4
的任何行都已通过左联接,但由于WHERE条件而被删除。因此,如果有一行的
offer\u id
与此日期的
4
不同,则结果中不会出现
Friday 2nd
的行


offer\u id=4
复选框移到
左连接
,改为:

SELECT DATE_FORMAT(calendar_date, '%a %D') AS calendar_date
     , count( tracker_id ) as clicks
FROM calendar
  LEFT JOIN offer_tracker 
    ON  offer_tracker.calendar_id = calendar.calendar_id
    AND offer_id = 4
WHERE calendar_month = Month(CURDATE())
  AND calendar_year = Year(CURDATE()) 
GROUP BY calendar_date

如果calendar\u idHello medopal中的某些行具有空值,则可能是左连接,offer\u tracker表中的calendar\u id设置为NOT NULL,并且我在calendar\u id中找不到任何具有空值的行,但感谢您将其标记为建议。查询是正确的。Mysql无法在没有地方可供参考的情况下返回结果。一个示例解决方案将类似于ypercube,你是个天才。感谢您的帮助和全面的回答。