使用ORDER BY时可重复的结果

时间:2011-03-17 16:41:22

标签: sql sql-order-by

说,我们有一个带有ID列(唯一值)和代码(非唯一)的表。没有插入/删除/更新操作,即它是一种常量。我们希望它按代码排序:

select ID, Code from T1 order by Code

所以我们得到类似的东西:

 4  'a'
 9  'a'
 1  'b'
 3  'b'

SQL标准或特定实现(然后是哪些)保证后续选择中的ID排序?我的意思是我们没有得到类似的东西:

 9  'a'
 4  'a'
 1  'b'
 3  'b'

6 个答案:

答案 0 :(得分:5)

你可以这样保证:

select ID, Code from T1 order by Code, ID

答案 1 :(得分:2)

订单仅由ORDER BY子句保证。您必须在该子句中添加另一列,以使结果可重复。

答案 2 :(得分:2)

SQL标准中没有指定的默认顺序。这意味着您的数据库引擎可以按照它选择的顺序自由返回行(很可能是最有效返回行的顺序)。

鉴于此表结构,行很可能以插入顺序返回或由主键排序,但如果没有指定ORDER BY子句,则不能依赖它。

答案 3 :(得分:1)

如果数据库没有变化,那么您应该看到它们只是按照数据库中存在的顺序输出,如果没有插入/更新,DB没有理由重新排序记录。我不相信有任何保证,你可能会遇到一些情况,其中一些记录在内存缓存中,而某些记录可能无法改变顺序,具体取决于您所使用的特定数据库引擎使用

答案 4 :(得分:0)

只有在指定ORDER BY时才能保证行顺序。

您是否有需要保证订单的示例,但由于某种原因无法使用ORDER BY?

答案 5 :(得分:0)

您可以对两个列使用自己的排序

select id, code from t1 order by code asc, id asc

无论如何,Altough默认是提升,但是我已明确提到要显示您可以单独指定两个列的顺序为asc or desc

相关问题