Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用ORDER BY时可重复的结果_Sql_Sql Order By - Fatal编程技术网

Sql 使用ORDER BY时可重复的结果

Sql 使用ORDER BY时可重复的结果,sql,sql-order-by,Sql,Sql Order By,比如说,我们有一个ID列(唯一值)和代码(非唯一值)的表。没有插入/删除/更新操作,即它是一种常量。我们希望它按代码排序: select ID, Code from T1 order by Code 因此,我们得到如下结果: 4 'a' 9 'a' 1 'b' 3 'b' 9 'a' 4 'a' 1 'b' 3 'b' SQL标准或特定实现(那么是哪种实现)是否保证了后续选择中的ID顺序?我的意思是,我们没有得到这样的东西: 4 'a' 9 'a'

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

select ID, Code from T1 order by Code
因此,我们得到如下结果:

 4  'a'
 9  'a'
 1  'b'
 3  'b'
 9  'a'
 4  'a'
 1  'b'
 3  'b'
SQL标准或特定实现(那么是哪种实现)是否保证了后续选择中的ID顺序?我的意思是,我们没有得到这样的东西:

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

您可以通过以下方式保证:

select ID, Code from T1 order by Code, ID

只有在指定order BY时,才能保证行顺序


您是否有这样一个示例:您需要有保证的订单,但由于某种原因无法使用order BY?

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

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

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

尽管默认值是升序,但我已经明确提到,可以将这两列的顺序分别指定为
asc或desc

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

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


给定此表结构,行很可能以插入顺序或主键顺序返回,但如果不指定
orderby
子句,就无法依赖它。

除了
orderby
子句中提供的内容之外,没有其他保证。尽管如此,一些数据库引擎将以一致的顺序返回数据。例如,网格分页,其中客户可以首先按任何列对数据进行排序。所以,如果他选择非唯一列,我们必须有可重复的选择结果,否则分页可能会跳过一些条目。