2010-11-20 39 views
1

我有經典的「弄一個表中的所有行與另一個表中的相應行數」的問題應當由該查詢來解決:爲什麼這個聚合查詢返回一個比它應該少的行?

SELECT 
    ideas.id, 
    ideas.idea, 
    submitted, 
    COUNT(votes.id) AS vote_count 
FROM ideas 
LEFT OUTER JOIN votes ON ideas.id = votes.idea 
WHERE dead = 0 
GROUP BY votes.idea 
ORDER BY vote_count DESC, submitted DESC 
LIMIT 10; 

有4行(帶死區= 0)的想法和一票(與第一個想法有關)。然而,這個查詢返回兩個記錄(想法#1和想法#2)與正確的vote_counts。爲什麼這不會返回想法中的所有記錄?

回答

3

當您說GROUP BY votes.idea時,您要求在投票中爲每個想法值輸入一個結果行。既然你說投票只有一行,你只能期望結果中只有兩條記錄 - 一條對應於那一排投票中的想法值,另一條與NULL(三條記錄沒有匹配的投票記錄集中)。

您的意思是GROUP BY ideas.idea

+0

啊哈我現在明白了,謝謝!這是漫長的一天... – Ross 2010-11-20 22:30:57

1

變化:

GROUP BY votes.idea 

到:

GROUP BY ideas.id 

因爲votes.idea可以爲NULL。

相關問題