oracle中order by造成分页错误
程序员文章站
2022-07-09 20:28:45
今天在工作中,在service中调用分页查询列表接口的时候,返回的到页面的数据中总是存在缺失的数据,还有重复的数据。后发现是order by导致的 ......
问题:今天在工作中,在service中调用分页查询列表接口的时候,返回的到页面的数据中总是存在缺失的数据,还有重复的数据。
分析:select * from (select rownum rn,t.* from (select * from student order by class) t where rownum <![cdata[<]]>#{1.endindex}) where rn <![cdata[>=]]>#{1.startindex}
当endindex为3和为5的时候rownum发生了变化
id |
student |
class |
rownum |
1 |
zhao |
2 |
1 |
2 |
qian |
2 |
2 |
3 |
li |
2 |
3 |
id |
stuent |
class |
rownum |
1 |
zhao |
2 |
1 |
3 |
li |
2 |
2 |
4 |
song |
2 |
3 |
2 |
qian |
2 |
4 |
5 |
yang |
2 |
5 |
在上表中qian 和li 的rownum发生了变化
总结:oracle分页语句中:
1 不存在order by 则系统根据rowid来排序
2 若存在order by 则order by 后面的限制的列必须要能确定唯一,或者最小粒度的列能确定唯一(如id列)如上class都相同,则可以加上
order by class,id 或者 order by class,rowid
推荐阅读
-
在oracle 数据库中查看一个sql语句的执行时间和SP2-0027错误
-
Oracle中字符缓冲区相关错误
-
Oracle存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符
-
Oracle报存储过程中调用DBLink同义词出现错误:PLS-00201: 必须声明标识符
-
oracle中order by造成分页错误
-
PL/SQL中编写Oracle数据库分页的存储过程
-
Oracle数据库中SQL细节、多表查询、分组查询、分页操作详解
-
Oracle ora-12514监听程序当前无法识别连接描述中请求的错误
-
Oracle使用MyBatis中RowBounds实现分页查询
-
Oracle使用MyBatis中RowBounds实现分页查询功能