当前位置:  开发笔记 > 编程语言 > 正文

Oracle SQL:ORDER BY非唯一字段是否确定?

如何解决《OracleSQL:ORDERBY非唯一字段是否确定?》经验,为你挑选了1个好方法。

让我们说我有一个观点 MYVIEW

COL1[CARCHAR2]    SORTINGCOL[NUMBER]
"itm1"            100
"itm2"            101
"itm3"            100

我查询以下语句

SELECT *
FROM MYVIEW
ORDER BY SORTINGCOL;

是否保证(=我可以依赖)返回的订单总是一样的吗?让我们说吧

    item1 (值为100)

    item3 (值为100)

    item2 (值为101)

很明显,item2总是会最终成为最后的,但对于item1item3用相同的SORTINGCOL价值呢?



1> Gordon Linof..:

一般而言,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()一直处理关系.

推荐阅读
女女的家_747
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有