21

可能重复:
为什么 SQL 查询的结果没有按我期望的顺序返回?

通过阅读7.5 Sorting Rows和我在 PostgreSQL 中看到的问题,我的印象如下,但该部分并不完全明确,因此如果有人可以验证,我将不胜感激:

SELECT * FROM items;

没有保证的顺序。

SELECT * FROM items ORDER BY published_date ASC;

保证具有不同日期的两个项目以给定的顺序出现,但不保证具有相同日期的两个项目总是以相同的顺序出现。

SELECT * FROM items ORDER BY published_date ASC, id ASC;

总是以相同的顺序返回项目,因为它是完全确定的。

我有这个权利吗?

我不太清楚对一个属性(例如published_date)进行排序是否能保证具有相同值的记录的顺序,如第二个示例所示。

4

1 回答 1

15

除非您在子句中明确指定顺序,否则无法保证顺序。ORDER BY

如果没有数据库活动,您可能会在多次执行时以相同的顺序获取数据,因为 PostgreSQL 只会按照在数据库页面中找到它们的顺序返回行。做一个小测试:

  • 插入保持所需顺序的行数;
  • 查询表:你会得到有序的行;
  • 更新集合中的第一条记录;
  • 再次查询表;
  • 观察结果。

简而言之:您甚至可以按所需顺序获取行,但这只是巧合。

于 2012-06-29T14:45:32.767 回答