gpt4 book ai didi

mysql - 两个(在我看来)等效的 SQL 查询返回不同的结果

转载 作者:行者123 更新时间:2023-11-29 04:07:41 25 4
gpt4 key购买 nike

我有这个查询,它在下面的屏幕截图中返回(正确的)结果:

SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC

Result of Query 1

但我需要以下格式的查询(因为我想在之后进行一些连接):

SELECT * FROM 
(SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC) q

此查询返回不同的结果(一些 owner_ids 不同): Result of Query 2

这让我发疯了好几个小时,怎么会这样?我仔细检查了表中的 ctime 是否不同并且没有出现两次。但是例如对于 ctime 1410003221,绝对只有一个条目(owner_id = 8 的条目)。

非常感谢您的帮助或提示。

最佳答案

这个查询:

SELECT owner_id, MAX(ctime) as post_time, aid
FROM `jul_cpg15x_pictures`
GROUP BY aid
ORDER BY aid DESC

使用部分分组依据。您正在选择 owner_idaid 列的未聚合值,但您仅按 aid 进行分组。 MySQL 可以免费为给定的 aid 组返回任何 owner_idORDER BY 子句没有帮助,因为排序是在分组之后 执行的。

因此,如果您的数据如下所示:

owner_id  ctime       aid
-------- ---------- ---
8 1410003221 176
2 1410000000 176

那么两个结果都是正确的(由于相同的帮助,两行合并为一行,按预期计算了最大 ctime,但可以返回任一行的 owner_id):

owner_id  post_time   aid
-------- ---------- ---
8 1410003221 176
owner_id  post_time   aid
-------- ---------- ---
2 1410003221 176

综上所述,如果您打算获取给定 aid 的最新帖子的 owner_id,您可以这样编写查询:

SELECT s1.aid, s1.ctime, s1.owner_id
FROM jul_cpg15x_pictures s1
JOIN (
SELECT aid, MAX(ctime) AS ctime
FROM jul_cpg15x_pictures
GROUP BY aid
) AS s2 ON s1.aid = s2.aid AND s1.ctime = s2.ctime

关于mysql - 两个(在我看来)等效的 SQL 查询返回不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25704232/

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