如果’orderby’值相同,为什么Oracle会返回特定的序列?

前端之家收集整理的这篇文章主要介绍了如果’orderby’值相同,为什么Oracle会返回特定的序列?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我对Oracle中的查询感到困惑,该查询以看似随机的顺序返回.
SELECT
  Date,Amount
FROM MyTable
WHERE Date = '26-OCT-2010'
ORDER BY Date

这将返回以下数据:

|  Date       |  Amount
--------------------------
1  |  26-OCT-10  |  85
2  |  26-OCT-10  |  9
3  |  26-OCT-10  |  100

我无法理解为什么数据库以此特定顺序返回数据,或者为什么,因为原始表将以这种方式返回数据.

对TIMESTAMP的转换日期确认所有日期值都是相同的值 – 26-OCT-10 00.00.00.000000000,因此,我可以排除这些值存在差异.但是,当我这样做时,行返回1,3,2的顺序.

这让我很生气,所以如果有人可以解释为什么会这样,那真的有助于抚慰我.

我希望每次运行查询时都会以不同的顺序返回,因为条件的条件在每一行都是相同的(因此使排序保持纯粹的机会).

提前谢谢了.

解决方法

排序不是“纯粹的机会” – 除非您将查询修改为:
SELECT
  Date,Amount
FROM MyTable
WHERE Date = '26-OCT-2010'
ORDER BY Date,DBMS_RANDOM.VALUE;

排序是“任意的”.而不是“掷骰子”来决定任意顺序(这会产生一些不必要的成本),Oracle只是按照它遇到的顺序返回数据 – 从短期内的运行开始可能是相同的. (从长远来看,环境中的某些东西可能会发生变化,使得排序不同 – 但仍然是随意的).

猜你在找的MsSQL相关文章