order by的mysql结果与order by和limit不同

order by的mysql结果与order by和limit不同,mysql,sql-order-by,sql-limit,Mysql,Sql Order By,Sql Limit,我有一个列id为age的表a 下面的两个查询返回不同的结果,我不知道为什么: SELECT distinct a.id id FROM A a ORDER BY a.age DESC SELECT distinct a.id id FROM A a ORDER BY a.age DESC LIMIT 10 OFFSET 0 有什么想法吗?我希望第二个查询返回第一个查询的前10个结果 编辑: 我忘了说的是,有些行的年龄相同。所以我认为这与它有关。我很惊讶它们能起作用。在大多数数据库中,都会出现语

我有一个列id为age的表a

下面的两个查询返回不同的结果,我不知道为什么:

SELECT distinct a.id id FROM A a ORDER BY a.age DESC
SELECT distinct a.id id FROM A a ORDER BY a.age DESC LIMIT 10 OFFSET 0
有什么想法吗?我希望第二个查询返回第一个查询的前10个结果

编辑:


我忘了说的是,有些行的年龄相同。所以我认为这与它有关。

我很惊讶它们能起作用。在大多数数据库中,都会出现语法错误,因为
a.age
不在
select
中。我知道MySQL通过扩展了
组,以允许使用未聚合的列。我假定它对
选择DISTINCT
有相同的推理。也就是说,年龄来自每个
id
的不确定行。它是如此不确定,以至于可能会从一个查询更改为另一个查询

以下是编写查询的两种适当方法:

SELECT distinct a.id, a.age
FROM A a
ORDER BY a.age DESC;
或:

无论是否有
限制

找到解决方案,这些都应该有更稳定的结果

我不知道为什么会这样。我使用的是mysql,当添加限制时,查询的实现可能与没有限制时有所不同。 不管怎样,我在订单上加了a.id。这在增加限额时保持了秩序

这就是查询的外观:

SELECT distinct a.id id FROM A a ORDER BY a.age DESC, a.id LIMIT 10 OFFSET 0

这是一个复制粘贴错误,我的意思是偏移量0(无论如何,偏移量10也不能正常工作),我对此表示怀疑。您能演示一下吗?我如何演示?通过提供适当的DDL和/或SQLFIDLE?第一个查询返回什么,第二个查询返回什么?我们看到的是相同的问题吗?id是索引的,对吗?虽然按select中的列排序显然是一种很好的做法,但我很惊讶这实际上对结果集有任何影响。
SELECT distinct a.id id FROM A a ORDER BY a.age DESC, a.id LIMIT 10 OFFSET 0