两个SQL连接,两个不同的结果

Abs*_*Abs 3 mysql sql

这两个查询有可能是不同的.我的意思是第一个查询没有包含左表中的所有行,所以我将条件放在连接部分中.

查询1

SELECT COUNT(*) as opens, hours.hour as point 
FROM hours 
LEFT OUTER JOIN tracking ON hours.hour = HOUR(FROM_UNIXTIME(tracking.open_date)) 
WHERE tracking.campaign_id = 83 
AND tracking.open_date < 1299538799 
AND tracking.open_date > 1299452401 
GROUP BY hours.hour
Run Code Online (Sandbox Code Playgroud)

查询2

SELECT COUNT(*) as opens, hours.hour as point 
FROM hours 
LEFT JOIN tracking ON hours.hour = HOUR(FROM_UNIXTIME(tracking.open_date)) 
AND tracking.campaign_id = 83 
AND tracking.open_date < 1299538799 
AND tracking.open_date > 1299452401 
GROUP BY hours.hour
Run Code Online (Sandbox Code Playgroud)

区别在于第一个查询给出了18行,其中第17到22点之间没有行.但是当我运行第二个查询时,它显示完全24行但是对于17到22之间的行,它的值为1!我希望它是0或NULL?如果真的是1,它应该没有出现在第一个查询中吗?

这是怎么发生的?

SQL*_*ace 5

第一个JOIN实际上是一个INNER JOIN,外连接表不应该像在顶部查询中那样出现在WHERE子句中,而不是COUNT(*),从外连接表中选择一个列