这两个查询有可能不同。我的意思是第一个查询没有包括我左表中的所有行,所以我把条件放在了连接部分中。两个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
查询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之间的行,它的值为!我希望它是0或NULL?如果它真的是1,它应该没有出现在第一个查询中?
这是怎么发生的?
啊!我错过了。非常感谢你! – Abs 2011-03-07 19:17:10
糟糕,我的错误,你是对的。你更快。 – Abs 2011-03-07 19:26:58
@erikkallen:你会这样想,但是在所有的RDBMS引擎中情况并非如此。据我所知,MySQL中的MyISAM和InnoDB引擎(以及MS SQL Server引擎)不计算'null'的实例。我不能为别人说话,但它似乎解决了OP的问题。 – 2011-03-07 19:29:50