Oracle "LIMIT n,m" equivalent Oracle "LIMIT n,m"的等价语句
Oracle "LIMIT n,m" equivalent Oracle "LIMIT n,m"的等价语句
可能是重复的问题:
我有这个查询语句
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"和其他错误。
谢谢
问题出现的原因是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"的效果。