当前位置: 代码迷 >> Oracle管理 >> 分页查询的细节,都亟需两次查询吗
  详细解决方案

分页查询的细节,都亟需两次查询吗

热度:71   发布时间:2016-04-24 04:53:54.0
分页查询的细节,都需要两次查询吗?
页面需要显示总共有多少页,还要显示当前页的数据。

这个必须查两次吗?有没有什么好的办法?
------解决方案--------------------
可以使用分析函数把总记录数检索出来,比如
标准分页SQL:

SELECT COUNT(*) FROM employees;

  COUNT(*)
----------
        61

SELECT n.employee_id
  FROM (SELECT m.employee_id,
               ROWNUM rn
          FROM (SELECT t.employee_id
                  FROM employees t
                 ORDER BY t.employee_id) m
         WHERE ROWNUM <= 4) n
 WHERE n.rn >= 2

EMPLOYEE_ID
-----------
          2
          3
          4

分析函数:

SELECT n.employee_id,
       n.total_cnt
  FROM (SELECT m.employee_id,
               m.total_cnt,
               ROWNUM rn
          FROM (SELECT t.employee_id,
                       COUNT(*) OVER() total_cnt
                  FROM employees t
                 ORDER BY t.employee_id) m
         WHERE ROWNUM <= 4) n
 WHERE n.rn >= 2

EMPLOYEE_ID  TOTAL_CNT
----------- ----------
          2         61
          3         61
          4         61

然后根据第一行TOTAL_CNT获取记录数就可以了。
  相关解决方案