不能。sql通常,尤其是Oracle不能保证稳定的排序。也就是说,您可以运行两次相同的查询并获得不同的排序-当键绑定时。
这是因为sql表(和结果集)表示 无序 集。因此,没有“自然”的命令可以依靠。通常,最好在中包含其他键order by
以使排序稳定。
编辑:
我想再说一遍。您的示例用于查询的整体排序,其中的问题有点抽象-也就是说,查询的任何给定运行看起来都是正确的。窗口功能成为一个更大的问题。因此,有可能:
select v.*, row_number() over (order by sortingcol) as col1,
row_number() over (order by sortingcol desc) as col2
from myview v
会产生不一致的结果。在正常情况下,我们希望col1 + col2
它会保持不变。但是,有了联系,通常就不会这样了。这会影响row_number()
和keep
。它不会影响rank()
或dense_rank()
始终处理关系。