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 

我不明白为什么我的左表中没有被保留。

+0

仔细检查你的数据,必须有一些问题与您的数据 – 2012-02-01 17:19:29

+0

此查询不会真正达到你想达到的(需要一个GROUP BY)的东西,但你应该如果数据是如何描述的,那么得到的结果不止一个。看起来这里有什么不对劲。 – smp7d 2012-02-01 17:21:35

你左边的表没有被保存下来,因为根据: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 
+0

真棒,有效...现在要查找“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 
+0

'COUNT(*)'将为blog_entries计数1,无评论。 – 2012-02-01 17:41:43

+0

@ypercube,对...忘了一个人本身... – DRapp 2012-02-01 17:46:07