2010-05-30 61 views
0

任何想法,为什么这不起作用在MySQL?MySQL查询帮助,包括计数?

SELECT blogentry.*, 
     person.personName, 
     (SELECT * 
      FROM BlogEntryComment 
     Where BlogEntryID = '8') as CommentCount  
    FROM blogentry 
INNER JOIN person ON blogentry.personID = person.personID 
WHERE blogentry.deleted = 'N' 
ORDER BY blogentry.dateAdded DESC 

回答

3

子查询只需要返回一个值:字段数。 *返回所有行,而count(*)将返回有多少行。

(SELECT count(*) FROM BlogEntryComment Where BlogEntryID = '8') 
+0

+1打我吧,更好的解释:) – 2010-05-30 00:24:08

1

你必须使用聚合函数COUNT为了得到价值 - 子查询中会体弱SELECT *,因为它正试图为行返回所有的列值到一个列。

也就是说,你所拥有的将返回相同的CommentCount值,每个BLOGENTRY记录返回。以下是更好的方法:

SELECT be.*, 
      p.personname, 
      COALESCE(x.num, 0) AS CommentCount 
    FROM BLOGENTRY be 
    JOIN PERSON p ON p.personid = be.personid 
LEFT JOIN (SELECT bec.blogentryid, 
        COUNT(*) AS num 
      FROM BLOGENTRYCOMMENT bec 
     GROUP BY bec.blogentryid) x ON x.blogentryid = be.blogentryid 
+0

+1。不知道它是否正确,但通常我发现的高级代表的查询是我不了解的,比“更简单”的解决方案快10倍, – Matchu 2010-05-30 01:47:42