gpt4 book ai didi

MySQL GROUP BY 三张表

转载 作者:行者123 更新时间:2023-11-29 03:14:37 27 4
gpt4 key购买 nike

我有以下表格:

posts (post_id, content, etc) 

comments (comment_id, post_id, content, etc)

posts_categories (post_category_id, post_id, category_id)

和这个查询:

SELECT `p`.*
, COUNT(comments.comment_id) AS cmts
, posts_categories.*
, comments.*
FROM `posts` AS `p`
LEFT JOIN `posts_categories`
ON `p`.post_id = `posts_categories`.post_id
LEFT JOIN `comments`
ON `p`.post_id = `comments`.post_id
GROUP BY `p`.`post_id`

post_id=1的评论有3条,一共4条。在 posts_categories 中有两行,都分配给 post_id=1。我的帖子有四行。

但是,如果我查询上面的语句,我得到的结果是 6 for COUNT(comments.comment_id) at post_id=1。这怎么可能?我想错误出在 GROUP BY 子句中的某个地方,但我不知道在哪里。

有什么建议吗?

最佳答案

作为第一次近似尝试

SELECT `p`.*
, COUNT(DISTINCT comments.comment_id) AS cmts
, posts_categories.*
, comments.*
FROM `posts` AS `p`
LEFT JOIN `posts_categories`
ON `p`.post_id = `posts_categories`.post_id
LEFT JOIN `comments`
ON `p`.post_id = `comments`.post_id
GROUP BY `p`.`post_id`

编辑:

但是,COUNT(DISTINCT field) 比 COUNT(field) 更昂贵,如果没有必要应该避免使用。既然你没有想到它,我会说你的情况是没有必要的。

您的问题源于您的联接返回 3(评论)x 2(类别)= 6 行。我不知道您将这些结果用于什么目的,但也许您应该重新考虑您的查询。

关于MySQL GROUP BY 三张表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2575286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com