Oracle "LIMIT n,m" equivalent Oracle "LIMIT n,m"的等价语句

6 浏览
0 Comments

Oracle "LIMIT n,m" equivalent Oracle "LIMIT n,m"的等价语句

可能是重复的问题:

如何通过Oracle查询限制返回的行数?

我有这个查询语句

select * from pr_device_reading order by date_reading DESC

注意这个查询是标准化的,由一个方法构建,表名会根据方法的参数改变,所以我无法指定列名(而且我确实希望在结果中获得所有列)。

在Oracle SQL中,下面的查询语句

SELECT * 
 FROM pr_lecture_combustibles 
ORDER BY date_lecture DESC 
LIMIT 10,20;

等同于什么?

我尝试了

SELECT * 
  FROM (SELECT * 
          FROM pr_lecture_combustibles 
         ORDER BY date_lecture DESC) 
 WHERE ROWNUM BETWEEN 10 AND 20;

其他语法,但是没有结果,出现"missing expression"和其他错误。

谢谢

0
0 Comments

问题出现的原因是Oracle数据库中没有类似于MySQL中的"LIMIT n,m"的语法来限制查询结果的数量和偏移量。为了解决这个问题,可以使用ROW_NUMBER分析函数来添加一个额外的列来实现类似的功能。以下是解决方法的示例代码:

SELECT *
FROM (
  SELECT a.*, ROW_NUMBER() OVER (ORDER BY date_lecture DESC) rn
  FROM pr_lecture_combustibles a
)
WHERE rn BETWEEN 10 AND 20

这段代码将在查询结果中添加一个名为"RN"的列,并使用ROW_NUMBER函数对结果集进行排序和编号。然后,外部查询将根据"RN"列的值来限制查询结果的数量和偏移量,以实现类似于"LIMIT n,m"的效果。

0