【问题标题】:Oracle sql rownum between how to shrink the query [duplicate]Oracle sql rownum之间如何缩小查询[重复]
【发布时间】:2020-06-25 06:46:47
【问题描述】:

我想获取从 25 到 50 的记录。我编写了这段代码,但是,使用双选子句看起来很糟糕。

Select * From (
    Select eto.*, rownum rn from employee_trip_orders eto
) where rn between 25 and 50 ;

如何缩小它以使用这样的选择?

 Select eto.*, eto.rownum rn from employee_trip_orders eto
 where rn between 25 and 50 ;

我不需要第二个。谢谢。我有旧的 11c Oracle 版本,offset 关键字不适合我

【问题讨论】:

  • 你根本做不到。第一个查询是唯一的方法
  • 您不想使用子查询的任何特殊原因?
  • 使用此查询还可以选择 all_coloumns_name,rn 形式(Select eto.*, rownum rn from employee_trip_orders eto)其中 rn

标签: sql oracle oracle11g pagination


【解决方案1】:

如何缩小它以使用这样的选择?

由于您使用的是 Oracle 11g,因此您不能。您必须使用子查询内联来实现所需的输出。

Select eto.*, eto.rownum rn from employee_trip_orders eto
where rn between 25 and 50 ;

该查询永远不会返回一行。 ROWNUM 值仅在分配后递增。请参阅How ROWNUM works in pagination query

从 Oracle 12c 开始,您可以使用新的 Top-n Row limiting 功能。

【讨论】:

    【解决方案2】:

    您没有使用order by 子句那么rownum 是什么意思?最后,您只获取 随机 26 条(包括 25-50 条)记录

    所以你可以使用下面的代码来达到你想要的结果:

    Select eto.*, rownum rn 
      from employee_trip_orders eto
     where rownum<= 26 ;
    

    干杯!!

    【讨论】:

      猜你喜欢
      • 2020-05-11
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      • 2011-07-15
      相关资源
      最近更新 更多