我正在使用mysql,我的查询几乎完美无缺。 我有以下三个表:
文章
- 的article_id
注释
- COMMENT_ID
- 的article_id
查看
- 的view_id
- 的article_id
我希望将所有这些信息放在一个查询中。我想看看每篇文章有多少观点和评论。 我今天已经成功地在一些伟大的人的帮助下制造了一个,但我又被卡住了。
SELECT article.id_article,
COUNT(view.id_article),
COUNT(comment.id_article)
FROM article LEFT JOIN view ON article.id_article = view.id_article
LEFT JOIN comment ON article.id_article = comment.id_article
GROUP BY id_article
ORDER BY id_article
结果是,只有第一行显示错误的结果。而不是4条评论和3条观点,我看到两者都有24条,不知道为什么,因为其余的都很好。似乎评论的数量是一式四份,并在评论和观点的第一行中再现。
答案 0 :(得分:1)
您正在通过加入获得笛卡尔产品:
1条* 4次观看* 3条评论= 12
不确定为什么你得到24,可能你有2篇文章第一行有相同的ID。
SELECT article.id_article,
COUNT(distinct view.id_view),
COUNT(distinct comment.id_comment)
FROM article LEFT JOIN view ON article.id_article = view.id_article
LEFT JOIN comment ON article.id_article = comment.id_article
GROUP BY id_article
ORDER BY id_article
编写此查询的另一种方法可以是:
SELECT article.id_article,
v.n_views,
c.n_comments
FROM article
LEFT JOIN (SELECT article_id,
count(*) n_views
FROM view
GROUP BY article_id) v ON article.id_article = v.id_article
LEFT JOIN (SELECT article_id,
count(*) n_comments
FROM comment
GROUP BY article_id) c ON article.id_article = c.id_article
GROUP BY id_article
ORDER BY id_article