這兩個查詢有可能不同。我的意思是第一個查詢沒有包括我左表中的所有行,所以我把條件放在了連接部分中。兩個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