按具有相同值的值排序时定义的 SQL 行为

Posted

技术标签:

【中文标题】按具有相同值的值排序时定义的 SQL 行为【英文标题】:Defined SQL behavior when ordering by values with same value 【发布时间】:2015-03-25 03:10:50 【问题描述】:

我正在翻阅一个非常大的结果集,页面大小为 5000,并按最后更新的日期时间排序。我还选择了最后更新时间小于操作开始时间的所有记录。

一切正常,但是我偶尔会多次看到记录。我想知道当有序列共享相同值时定义的行为是什么。

例如,如果我按 X 列排序,并且三行的该列的值为 5。这些值是否总是使用相同的 order by 表达式以相同的顺序排列?

【问题讨论】:

根据this SO article,SQL 标准并没有指定值是否总是相同的顺序。 【参考方案1】:

无法保证始终应用相同的订单。

如果ORDER BY 中没有使用列,则结果将是随机的。您可能会观察到可重复的结果(意味着多次运行的顺序相同),但您不能相信它总是正确的。您可能希望在 ORDER BY 中添加另一列以获得一致的结果。

【讨论】:

【参考方案2】:

它与主键的概念相同。您需要能够唯一标识数据,因此程序别无选择,只能以相同的方式返回数据。考虑在您的 ORDER BY 语句中添加另一列并使用ASCDESC 确保它以相同的方式打印出来。

【讨论】:

以上是关于按具有相同值的值排序时定义的 SQL 行为的主要内容,如果未能解决你的问题,请参考以下文章

sql语句怎么按照字段1排序后再在本字段内按时间排序?

具有未定义和空值的排序对象数组

alpha 对具有相同整数值且应按升序排列的列表进行排序[重复]

【SQL】根据一个字段分组求另一个字段的最大值,并带出其他字段

SQL:只选择一行具有相同值的表

ASP+ACCESS里怎样按某条字段值自定义排序?