让我们说我有一个观点 MYVIEW
COL1[CARCHAR2] SORTINGCOL[NUMBER] "itm1" 100 "itm2" 101 "itm3" 100
我查询以下语句
SELECT * FROM MYVIEW ORDER BY SORTINGCOL;
是否保证(=我可以依赖)返回的订单总是一样的吗?让我们说吧
item1
(值为100)
item3
(值为100)
item2
(值为101)
很明显,item2
总是会最终成为最后的,但对于item1
并item3
用相同的SORTINGCOL
价值呢?
一般而言,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()
一直处理关系.