mysql - 计算左连接表的空字段

时间:2013-07-22 02:49:22

标签: mysql

Table Article id title
Table Comment id articleID comment

SELECT a.*, count(c.id) FROM Article as a LEFT JOINT Comment as c 
ON c.articleID = a.id
LIMIT 0, 10

我想显示带有数字注释的文章,但它只列出1个结果(有注释)。

并且不列出没有评论的文章。

如何列出所有文章(有评论/没有评论)?

2 个答案:

答案 0 :(得分:3)

首先,您必须在基本查询中使用GROUP BY

SELECT a.id, a.title, COUNT(c.id) comment_count
  FROM Article a LEFT JOIN Comment c 
    ON c.articleID = a.id
 GROUP BY a.id, a.title

示例输出:

| ID |  TITLE | COMMENT_COUNT |
-------------------------------
|  1 | Title1 |             2 |
|  2 | Title2 |             0 |

这是 SQLFiddle 演示

现在,如果您使用LEFT JOIN并且只想要包含评论的文章,​​则需要应用HAVING子句

SELECT a.id, a.title, COUNT(c.id) comment_count
  FROM Article a LEFT JOIN Comment c 
    ON c.articleID = a.id
 GROUP BY a.id, a.title
HAVING comment_count > 0

或简单地使用INNER JOIN作为安迪建议,因为内部联接将过滤掉所有不匹配(意味着所有在评论表中没有相应记录的文章,反之亦然)。 在大多数情况下使用INNER JOIN比使用LEFT JOIN 更快。

SELECT a.id, a.title, COUNT(c.id) comment_count
  FROM Article a JOIN Comment c 
    ON c.articleID = a.id
 GROUP BY a.id, a.title

两者都会产生:

| ID |  TITLE | COMMENT_COUNT |
-------------------------------
|  1 | Title1 |             2 |

这是 SQLFiddle 演示

答案 1 :(得分:0)

不要离开加入...

当您离开加入时,您只需将一个匹配行加入表文章,您只需按原样加入表格,然后按文章ID分组并计算分组结果

SELECT a.*, count(a.id) FROM Article as a, Comment as c 
WHERE c.articleID = a.id
GROUP BY a.id
LIMIT 0, 10