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个结果(有注释)。
并且不列出没有评论的文章。
如何列出所有文章(有评论/没有评论)?
答案 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