MySQL的左连接不保留左表
所以我有一个简单的数据结构:MySQL的左连接不保留左表
blog_entries
id | category | title | body | desc| date
blog_comments
id | entry_id | author | email | website | body | date
我想LEFT JOIN blog_comments ON entry_id为每个条目的评论获取COUNT。我在'blog_entries'中只有两条记录,'blog_comments'只有两条记录。出于某种原因,当我运行下面的查询,我只得到一个结果回:
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
我不明白为什么我的左表中没有被保留。
你左边的表没有被保存下来,因为根据: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
真棒,有效...现在要查找“COALESCE”... – 2012-02-01 17:49:16
除了由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
'COUNT(*)'将为blog_entries计数1,无评论。 – 2012-02-01 17:41:43
@ypercube,对...忘了一个人本身... – DRapp 2012-02-01 17:46:07
仔细检查你的数据,必须有一些问题与您的数据 – 2012-02-01 17:19:29
此查询不会真正达到你想达到的(需要一个GROUP BY)的东西,但你应该如果数据是如何描述的,那么得到的结果不止一个。看起来这里有什么不对劲。 – smp7d 2012-02-01 17:21:35