gpt4 book ai didi

MySQL LIMIT 返回错误的行集

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

(在 MS Azure 云版本的 MySQL - CleadDB 上运行)

我有一个简单的查询:

SELECT idx, date_added FROM my_table ORDER BY idx ASC LIMIT 100752, 10

我期望在 idx 100752(如果存在)之后获得接下来的 10 条记录。但是我得到了完全不同的记录,即:

enter image description here

我验证了记录是否存在,因此我再次运行查询,这次使用我知道的记录,即:

SELECT idx, date_added FROM my_table ORDER BY idx ASC LIMIT 102366, 10

但我再次收到以下不匹配的行。

enter image description here

我知道我可能在做一些愚蠢的事情。感谢帮助。

编辑/更新:我遵循下面的一些建议,并使用特定的 WHERE 谓词而不是 LIMIT 函数来测试结果。请查看下面的结果。两个查询应该返回相同的结果 - 或者我所期望的。

测试 1:

SELECT idx, date_added  FROM attachments ORDER BY idx ASC LIMIT 67805, 20

返回: enter image description here

测试 2:

SELECT 
idx, date_added
FROM attachments
WHERE
idx >=67805 and idx <67825
ORDER BY idx ASC

返回: enter image description here

我希望两者是相同的,但事实并非如此。

解决方案:LIMIT 不关心主自增键。它关心行数(无论其索引如何),因此即使 idx 已排序 - 当某些行丢失时(意味着过去有一些删除),它也会根据已删除的行数抵消结果。谢谢大家。

最佳答案

您的 idx 列中可能存在空白。也就是说,idx 的某些值曾经使用过,但不再存在于表中。因此,行号与 idx 不同(LIMIT offset, row_count 适用于行号,而不是 idx)

为什么不试试这个查询呢?

SELECT 
idx, date_added
FROM my_table
WHERE
idx >=100752 and idx <100762
ORDER BY idx ASC

关于MySQL LIMIT 返回错误的行集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42143320/

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