作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果需要更多信息来回答此问题,请添加评论。
我们有一个返回笛卡尔积的查询。由于结果很多,因此可能有大量的物体发生水合。我们希望在数据库端进行简单的分页,这样速度很快,因此它只从第 n*page 行开始提取 n 个结果,其中 n 是 100。
我们遇到的麻烦是对查询执行了distinct
,以便仅返回必要的行。但是,这最终会过滤结果,因此您得到的结果少于 100。
因此,即使我们有页码,如果不执行查询来首先查看起点(即我们不能使用 rownum),我们也不知道从哪里开始或停止,并且可能会循环直到我们得到 100 个结果,你就明白了。很乱。
如果需要,我们可以直接执行 SQL,但重构表之类的操作不可行。
无论如何,我无法想象我们是第一个遇到这种情况的人,所以我想知道是否有办法做到这一点。
提前致谢!
编辑:@nicolas78 发布了一条评论,准确描述了情况。
最佳答案
您需要将 DISTINCT 进一步插入查询中,以便它在应用分页之前完成。例如:
select deptno from
( select deptno, rownum as rn from
( select DISTINCT deptno
from emp
order by deptno
)
where rownum < :pagenum*100
)
where rn > (:pagenum-1)*100;
关于java - 使用笛卡尔积分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3354103/
我是一名优秀的程序员,十分优秀!