0
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 个结果(有评论)。

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

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

4

2 回答 2

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

样本输出:

| 身份证 | 标题 | COMMENT_COUNT |
-------------------------------------------
| 1 | 标题1 | 2 |
| 2 | 标题2 | 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像 Andy 建议的那样简单地使用,因为内部连接将过滤掉所有不匹配的内容(意味着所有在评论表中没有相应记录的文章,反之亦然)。在大多数情况下使用比使用更快INNER JOINLEFT 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

两者都会产生:

| 身份证 | 标题 | COMMENT_COUNT |
-------------------------------------------
| 1 | 标题1 | 2 |

这是SQLFiddle演示

于 2013-07-22T02:55:17.957 回答
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
于 2013-07-22T02:51:42.040 回答