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 个结果(有评论)。
并且不列出文章没有评论。
如何列出所有文章(有评论/没有评论)?
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 个结果(有评论)。
并且不列出文章没有评论。
如何列出所有文章(有评论/没有评论)?
首先,您必须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 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
两者都会产生:
| 身份证 | 标题 | COMMENT_COUNT | ------------------------------------------- | 1 | 标题1 | 2 |
这是SQLFiddle演示
不要左加入...
当您离开加入时,您只需将一个匹配的行加入表格文章,您只想加入表格,然后按文章 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