gpt4 book ai didi

sql - Oracle SQL : Is ORDER BY non unique field deterministic?

转载 作者:行者123 更新时间:2023-12-04 23:13:47 25 4
gpt4 key购买 nike

假设我有一个观点 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 呢?和 item3SORTINGCOL值(value)?

    最佳答案

    不可以。一般的 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()始终如一地处理关系。

    关于sql - Oracle SQL : Is ORDER BY non unique field deterministic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34396818/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com