Java 笛卡尔乘积分页

Java 笛卡尔乘积分页,java,database,hibernate,pagination,oracle9i,Java,Database,Hibernate,Pagination,Oracle9i,如果需要更多信息来回答此问题,请添加评论 我们有一个返回笛卡尔乘积的查询。由于有很多结果,有可能有大量的物体被水化。我们希望在数据库端进行简单的分页,因此它很快,所以它只从n*page行开始提取n个结果,其中n是100 我们遇到的问题是,正在对查询执行distinct操作,以便只返回必要的行。但是,这最终会过滤结果,因此得到的结果少于100 因此,即使我们有页码,如果不先查询起点,我们也不知道从哪里开始或停止,也就是说,我们不能使用rownum,在得到100个结果之前,我们可能会循环,你明白了。

如果需要更多信息来回答此问题,请添加评论

我们有一个返回笛卡尔乘积的查询。由于有很多结果,有可能有大量的物体被水化。我们希望在数据库端进行简单的分页,因此它很快,所以它只从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;

我对你在做什么有一个模糊的概念。基本上,您不知道如何处理结果集的第101行,比如说,因为它基于两个参数,很多组合都被丢弃了?如果是这样的话,我不知道如何预测这一点,我假设问题不是向前或向后翻页,而是跳转到第5页,在那里你不知道如何获取它们,对吗?。这并没有多大帮助——只是试图澄清条件。是的,这正是问题所在。即使我们要求得到100个结果,我们也只能得到67个。我们不知道在请求第n页时从哪一行开始