我有经典的'获取一个表中的所有行以及另一个表中相应行的数量'这个问题应该通过此查询来解决:
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。为什么这不会返回想法中的所有记录?
答案 0 :(得分:3)
当您说GROUP BY votes.idea
时,您要求每个创意值的一个结果行投票。既然你说投票只有一行,你应该只期望结果中有两个记录 - 一个对应于该行投票中的想法值,另一个对应于NULL(缩小三行没有匹配的投票记录)。
您的意思是GROUP BY ideas.idea
吗?
答案 1 :(得分:1)
变化:
GROUP BY votes.idea
为:
GROUP BY ideas.id
因为votes.idea
可以为NULL。