这两个查询怎么可能不同。我的意思是第一个查询不包括我左表中的所有行,所以我将条件放在连接部分。
查询 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
查询 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
不同之处在于第一个查询给了我 18 行,其中点 17 到 22 之间没有行。但是当我运行第二个查询时,它显示了完整的 24 行,但是对于 17 到 22 之间的行它有一个值1!我会期望它是 0 还是 NULL?如果它真的是 1,它应该不会出现在第一个查询中吗?
这是怎么发生的?
最佳答案
第一个 JOIN 实际上是一个 INNER JOIN,外连接表不应该像在顶部查询中那样出现在 WHERE 子句中,而不是 COUNT(*),从外连接表中选择一列
关于mysql - 两个 SQL 连接,两个不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5224034/