不能对 rownum 使用 >(大于或等于 1 的数值)、>=(大于 1 的数值)、=(不等于 1 的数值),否则无结果。所以直接用 rownum 的时候只能从 1 开始,
比如 rownum >1 没有记录,因为第一条不满足去掉的话,第二条的 rownum 又成了 1,所以永远没有满足条件的记录。
SELECT *
FROM emp
WHERE rownum >= 1;
1. rownum 不从1开始分页查询的三种方法
SELECT *
FROM (
SELECT rownum AS rnum, e.*
FROM emp e
)
WHERE rnum >= 10;
1.1 分页查询方法一
SELECT *
FROM (
SELECT rownum AS rnum, e.*
FROM emp e
WHERE rownum <= 10
)
WHERE rnum >= 5;
1.2 分页查询方法二
SELECT *
FROM (
SELECT rownum AS rnum, e.*
FROM emp e
)
WHERE rnum BETWEEN 3 AND 6;
此方法shardingjdbc不支持。
1.3 分页查询方法三
SELECT *
FROM (
SELECT rownum AS rnum, e.*
FROM (
SELECT *
FROM emp
) e
WHERE rownum <= 10
)
WHERE rnum >= 8;
2. shardingjdbc推荐的写法
SELECT * FROM (
SELECT row_.*, rownum rownum_ FROM (
SELECT o.order_id as order_id FROM t_order o JOIN t_order_item i ON o.order_id =
i.order_id) row_
WHERE rownum <= ? )
WHERE rownum_ > ?
其中rownum <= 后面的参数是当前页的结束位置,rownum_ > 后面的参数是偏移位置。
shardingjdbc 目前不支持rownum + BETWEEN的分页方式。