标签:TMP ... 查询 Oracle ROWNUM 数据 ORDER SELECT
使用 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
标签:TMP,...,查询,Oracle,ROWNUM,数据,ORDER,SELECT 来源: https://www.cnblogs.com/m2492565210/p/15547765.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。