oracle里数据的抽出结果排序,第一次和第二次不一样,第二次以后保持不变,啥原因?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle里数据的抽出结果排序,第一次和第二次不一样,第二次以后保持不变,啥原因?相关的知识,希望对你有一定的参考价值。

oracle对无order by的语句返回的结果不进行排序,oracle此时的处理方式是按照数据的物理存储顺序来读取数据。因为rowid是每行数据的地址,所以有时候看起来会像是使用rowid排序的。但这个顺序是可能被打乱的,在表的数据被删除后,rowid会被新插入的数据占用。所以一个无order by查询结果看起来也可能是个杂乱无章的。
oracle的数据库实现就一个原则,怎么快怎么效率高就怎么来。
参考技术A 假设排序的字段名字为field1降序, table name: tab
SELECT field1, field2, field3... fieldn
FROM (SELECT field1, field2, field3...fieldn, ROW_NUMBER() OVER(ORDER BY field1 DESC) AS RK ) FROM tab ) t
WHERE rk = 1

00904是说列名不正确,仔细看了下,AS RK后面多了一个括号,下面这样就可以了
SELECT field1, field2, field3... fieldn
FROM (SELECT field1, field2, field3...fieldn,
ROW_NUMBER() OVER(ORDER BY field1 DESC) AS RK
FROM tab
where field1=表名.字段名) t
WHERE rk = 1

我给你改一下吧,你写的那个效率很低的
SELECT t1.a, t1.b, t2.field1, t2.field2, t2.field3...t2.fieldn
FROM lkk t1,
(SELECT field1, field2, field3...fieldn,
ROW_NUMBER() OVER(ORDER BY field1 DESC) AS RK
FROM tab) t
WHERE t.field1 = t1.a
AND t.rk = 1

以上是关于oracle里数据的抽出结果排序,第一次和第二次不一样,第二次以后保持不变,啥原因?的主要内容,如果未能解决你的问题,请参考以下文章

为啥F10第二次不工作?

DWZ-JUI+UEditor第二次不显示,UEditor异步加载第二次不显示的解决方案

为啥第二次不打开引导模式对话框?

冒泡排序

Laravel csrf 令牌在 ajax 上第二次不匹配

通过 AJAX 更新 wordpress 表单第二次不起作用