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

esa*_*606 5 sql oracle

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

Gor*_*off 8

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

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

编辑:

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

如果您需要特定顺序的东西,可以添加rowid到该order by子句中(参见此处).事实上,rowid没有可能解决你的问题row_number().

  • FYI,如果启用了行移动,`rowid`可能不会稳定. (3认同)