gpt4 book ai didi

mysql - MySQL 中的分组 JOIN 查询 - 使用 ON 与 HAVING 条件进行过滤(有什么区别吗?)

转载 作者:行者123 更新时间:2023-11-29 05:33:39 25 4
gpt4 key购买 nike

以下是伪查询,所以我不关心结果,但是以下 MySQL 查询之间是否存在任何差异(在性能、结果量等方面)?

查询 1

SELECT u.`username`, COUNT(*) AS 'posts', u.`age`
FROM `users` u
INNER JOIN `posts` p
ON p.`user_id`=u.`id`
GROUP BY u.`id`
HAVING u.`age` > 12

假设在这个查询中选择列smth只是为了HAVING条件,所以结果中不需要它的值。

查询 2

SELECT u.`username`, COUNT(*) AS 'posts'
FROM `users` u
INNER JOIN `posts` p
ON p.`user_id`=u.`id` AND u.`age` > 12
GROUP BY u.`id`

最佳答案

HAVING 总是在所有 JOIN 和 WHERE 过滤器完成之后完成。它本质上是对查询结果的过滤器。这就是为什么您不能使用它来过滤不属于查询的字段。

您的查询将以不同方式执行。查询 2 会更有效,因为它会在 JOIN 期间过滤掉用户。查询 1 将加入所有用户,提取所有数据并对其进行分组,然后根据年龄对其进行过滤。查询 2 将 GROUP 并仅过滤 12 岁以下的用户,然后对其进行 GROUP。在查询 2 中需要读取和分组的数据更少。

关于mysql - MySQL 中的分组 JOIN 查询 - 使用 ON 与 HAVING 条件进行过滤(有什么区别吗?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12558278/

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