gpt4 book ai didi

mysql - 使用 IN 子句时是否应该使用 GROUP BY?

转载 作者:行者123 更新时间:2023-11-29 10:44:41 24 4
gpt4 key购买 nike

我正在处理别人的项目。有这样一个查询:

SELECT     posts.id, posts.title, posts.body, posts.keywords 
FROM posts
INNER JOIN pivot ON pivot.post_id = posts.id
INNER JOIN tags ON tags.id = pivot.tag_id
WHERE tags.name IN ( :keywords )
GROUP BY posts.id

新策略是将 IN 替换为 =。所以我编写的查询如下所示:

SELECT     posts.id, posts.title, posts.body, posts.keywords 
FROM posts
INNER JOIN pivot ON pivot.post_id = posts.id
INNER JOIN tags ON tags.id = pivot.tag_id
WHERE tags.name = :keyword
GROUP BY posts.id

现在我想知道,在这种情况下,GROUP BY 是多余的吗?我这么说是因为我认为 GROUP BY 的原因是省略了与每个关键字匹配的重复帖子。

最佳答案

首先,当在 SELECT 语句中使用 GROUP BY 时,未包含在分组子句中的每一列都应使用聚合函数进行包装。

仅仅因为 MySQL 允许这种奇怪的行为并不能使其成为最佳实践。其他 DBMS(例如 PostgreSQL)根本不允许执行此查询。

也就是说,它在 MySQL 内部的工作原理就是为每个 posts.id 获得唯一的记录,但为所有非聚合和非分组列从可能不同的行中获取随机值.

据我所知,您应该使用DISTINCT

<小时/>

回答您的问题

IN 替换为 = 根本不会影响分组,因此您可以自由使用它,特别是如果您不传递列表而是向其传递单个值的话查询,但 GROUP BY 在任何情况下都不是多余的(或者应该在两者中完全删除)。它会改变您收到的输出。

例如,如果您按表中的唯一列进行分组,并将其连接到具有 1:1 关系的表,GROUP BY 将是多余的。作为第二个示例,构造带有条件的正确 WHERE 子句可能也会使其变得多余。

关于mysql - 使用 IN 子句时是否应该使用 GROUP BY?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44831186/

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