我有创建分页系统的查询,我只想选择A *,即使我需要也不想显示row_number值。
SELECT *
FROM (SELECT A.*, rownum row_number
FROM (select * from dual
) A
WHERE rownum <= 10)
WHERE row_number >= 1
结果:
D ROW_NUMBER
- ----------
X 1
我想要什么
D
-
X
感谢帮助
答案 0 :(得分:0)
如果表具有primary key
,则只能对此键执行分页过滤器,然后在第二步中根据PK选择数据。
这将允许您使用SELECT *
select * from tab
where id in (
SELECT id
FROM (SELECT id, rownum row_number
FROM (select id from tab
) A
WHERE rownum <= 10)
WHERE row_number >= 1)
您将付出一点性能损失,因为必须通过主键索引另外访问每一行(但是10左右左右的行将不可见)。
具有 pagination 的另一点是,您通常需要以某种顺序显示数据,而不是像示例中那样仅以randrand方式显示。
在这种情况下,最里面的子查询将是
select id from tab order by <some column>
在这里您可以获利,因为您只需要对PK和排序键进行排序,而不是对整个行进行排序(但同样,它将对10行不可见)。