子查询选择仅选择一个列

时间:2019-12-19 10:08:31

标签: sql oracle

我有创建分页系统的查询,我只想选择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  

感谢帮助

1 个答案:

答案 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行不可见)。