row_number()总会以同样的方式打破关系吗?

时间:2014-12-24 19:11:56

标签: sql oracle

函数row_number()是否总是以相同的方式对相同的数据进行排序?

1 个答案:

答案 0 :(得分:8)

没有。在SQL中排序是不稳定的,这意味着原始排序顺序保留。无法保证分析函数或order by将以相同的顺序返回相同键值的结果。

您始终可以添加唯一ID作为排序中的最后一个键,以使其可重现。

编辑:

注意:order by的不可重现性是SQL标准的一部分。 Oracle文档没有另外指定。而且,一般来说,我在数据库中的排序通常不稳定(对于等效的键值)。我希望row_number()的行为方式相同。

如果您需要特定顺序的内容,可以将rowid添加到order by子句中(请参阅here)。事实上,rowid可以在没有row_number()的情况下解决您的问题。