MySql Left Join不保留Left Table

时间:2012-02-01 17:17:32

标签: mysql count left-join

所以我有一个简单的数据结构:

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表没有被保存。

2 个答案:

答案 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