C/C++教程

问题记录:Oracle分页查询在某个特定页时,几个连续页数据查询返回数据一样

本文主要是介绍问题记录:Oracle分页查询在某个特定页时,几个连续页数据查询返回数据一样,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

使用 MyBatisPlus 分布查询时,在特定页面时候返回数值一样,MyBatisPlus调用如下:

List<SomeObject> selectWatchListModel(Page<SomeObject> page, @Param("query")SomeObjectQuery query);

后端日志如下:

SELECT * FROM 
( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT ... FROM ... ORDER BY INDEXORDER ASC, TRIGTIME DESC nulls LAST ) TMP WHERE ROWNUM <=200) 
WHERE ROW_ID > 190

分析发现

SELECT ... FROM ... ORDER BY INDEXORDER ASC, TRIGTIME DESC nulls LAST

查询并没有问题,该查询多次返回结果并没有重复项,顺序也是一致,但是 

WHERE ROWNUM <=200

当ROWNUM对应不同的数值时个,如当查询为<190时,对比发现两次查询返回内容尾部排序不同,但是最后的几个又是相同,这导致了整个查询在相同的几页返回的数据是一样的

 

解决方案:在自定义的查询里面添加 distinct,最后生成语句是:

SELECT * FROM 
( SELECT TMP.*, ROWNUM ROW_ID FROM ( SELECT DISTINCT ... FROM ... ORDER BY INDEXORDER ASC, TRIGTIME DESC nulls LAST ) TMP WHERE ROWNUM <=200) 
WHERE ROW_ID > 190

  

这篇关于问题记录:Oracle分页查询在某个特定页时,几个连续页数据查询返回数据一样的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!