oracle 分页查询 rownum + order by,查询结果异常
逻辑SQL:
select * from ( select temp.*, rownum row_id from ( select logid,portal,moduleid,modulename,operid,opername,operip,content,logresult,failreason,createtime from sys_operlog order by createtime desc ) temp where rownum <= ?) where row_id > ?
分2库4个表:
a.sys_operlog_0, a.sys_operlog_1, b.sys_operlog_0, b.sys_operlog_2
用了框架Mybastis的PageInterceptor处理产生逻辑SQL。
异常结果:
正常查询出第一页数据,后续页数据不正常。
观察 逻辑SQL 被改写的结果,以第2页为例:
select * from ( select temp.*, rownum row_id from ( select logid,portal,moduleid,modulename,operid,opername,operip,content,logresult,failreason,createtime from sys_operlog_0 order by createtime desc ) temp where rownum <= 20) where row_id > 10
逻辑SQL去掉“order by createtime desc”后,可以正常查询出每一页数据。
观察 逻辑SQL 被改写的结果,以第2页为例:
select * from ( select temp.*, rownum row_id from ( select logid,portal,moduleid,modulename,operid,opername,operip,content,logresult,failreason,createtime from sys_operlog_0 ) temp where rownum <= 20) where row_id > 0
初步分析,问题就是出在红色部分,但没找到解决办法,请大神帮助。谢谢。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论