所以我有一个简单的数据结构:
blog_entries
id | category | title | body | desc| date
blog_comments
id | entry_id | author | email | website | body | date
我试图在entry_id上左右加入blog_comments,以获得每个条目的评论COUNT。我只有两个记录在&blog; blog_entries'博客评论中没有一个' ATM。出于某种原因,当我运行下面的查询时,我只得到一个结果:
SELECT blog_entries.*, COUNT(blog_comments.id) AS comment_count FROM blog_entries LEFT JOIN blog_comments ON blog_entries.id = blog_comments.entry_id
我不明白为什么我的LEFT表没有被保存。
答案 0 :(得分:2)
您的左表未被保留,因为根据:Group by functions
如果在不包含GROUP BY子句的语句中使用组函数,则它等同于对所有行进行分组。
您应该使用:
SELECT
blog_entries.*,
COALESCE( c.cnt, 0 ) as comment_count
FROM blog_entries
LEFT JOIN
( SELECT entry_id, COUNT(*) as cnt
FROM blog_comments
GROUP BY entry_id ) c
ON blog_entries.id = c.entry_id
答案 1 :(得分:0)
除了smp7d评论的“GROUP BY”之外,我会将其更改为count(*)。如果左边的连接对于注释是NULL,那会不会引起你的问题呢?
select
be.*,
count(*)
from
blog_entries be
left join blog_comments bc
on be.id = bc.entry_id
group by
be.id