有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用笛卡尔乘积的java分页

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

我们有一个返回笛卡尔乘积的查询。由于有很多结果,有可能有大量的物体被水化。我们希望在数据库端进行简单的分页,因此它很快,所以它只从n*page行开始提取n个结果,其中n是100

我们遇到的问题是,正在对查询执行distinct,以便只返回必要的行。但是,这最终会过滤结果,因此得到的结果少于100

因此,即使我们有页码,我们也不知道在哪里开始或停止,而不先进行查询以查看起点(即,我们不能使用rownum),并且可能会循环,直到得到100个结果,您就知道了。很乱

如果需要,我们可以直接使用SQL,但是重构表之类的东西是不可取的

不管怎样,我无法想象我们是第一个遇到这种情况的人,所以我想知道是否有办法做到这一点

提前谢谢

编辑:@nicolas78发表了一条评论,准确描述了当时的情况


共 (1) 个答案

  1. # 1 楼答案

    您需要将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;