我有一个包含列id,年龄的表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个结果。
修改
我忘了说的是有相同年龄的行。所以我认为这与它有关。
答案 0 :(得分:0)
我很惊讶他们的工作。在大多数数据库中,您会收到语法错误,因为a.age
不在select
中。我知道MySQL扩展了GROUP BY
以允许使用未聚合的列。我认为它对SELECT DISTINCT
有相同的推理。也就是说,年龄来自每个id
的不确定行。它是如此不确定,可能会从一个查询更改为另一个查询。
以下是编写查询的两种适当方法:
SELECT distinct a.id, a.age
FROM A a
ORDER BY a.age DESC;
或:
SELECT a.id
FROM A a
ORDER BY MIN(a.age) DESC; -- Or perhaps MAX(a.age) or AVG(a.age)
无论是否有LIMIT
,这些都应该有更稳定的结果。
答案 1 :(得分:0)
找到解决方案。
我不确定为什么会这样。我正在使用mysql,并且可能在添加限制时执行查询与不使用它时不同。 无论如何,我在ORDER BY a.id中添加了。这在添加限制时保留了订单。
这就是查询的外观:
SELECT distinct a.id id FROM A a ORDER BY a.age DESC, a.id LIMIT 10 OFFSET 0