gpt4 book ai didi

mysql - 带有 HAVING min/max 的 SQL 查询返回的行数比没有的少

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:14 25 4
gpt4 key购买 nike

我有一个类似这样的 SQL 查询:

SELECT A.*, C.value
FROM A
JOIN B ON B.group = A.group
JOIN C ON C.a = A.id
GROUP BY A.group

此查询返回一定数量的行。由于 GROUP BY,如果 A.group 有多个相同的值,我试图指定我想要的行 - 所以我添加了一个 HAVING 子句:

SELECT A.*, C.value
FROM A
JOIN B ON B.group = A.group
JOIN C ON C.a = A.id
GROUP BY A.group
HAVING C.value = MIN(C.value)

我的理解是,MySQL 应该首先应用所有连接和其他条件,然后再进行分组。由于我只是要求具有最小 C.value 的行,因此分组不应消除任何情况。

但是后一个查询返回的行数少于前一个。为什么会这样,我怎样才能实现所需的行为?

(服务器运行MySQL 5.1)

最佳答案

My understanding was that MySQL should first apply all the joins and other conditions and then do the grouping. And since I'm simply asking for the row with the minimum C.value, the grouping should not eliminate any cases.

But the latter query returns less rows than the former. Why is that and how can I achieve the desired behavior?

你说的是真的——但是“有”在解决分组之前没有任何效果。通过将 HAVING C.value = MIN(C.value) 添加到任何查询,您表示在该查询中执行所有操作,然后仅返回具有最小值的结果C. 这个 HAVING 语句总是返回更少(或相等)的行数。

关于mysql - 带有 HAVING min/max 的 SQL 查询返回的行数比没有的少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702164/

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