甲骨文 11g 中的限制条款

  • 本文关键字:11g 甲骨文 sql oracle
  • 更新时间 :
  • 英文 :


我是数据库新手,已经开始学习SQL。 我正在尝试转换MySQL查询以使用oracle数据库。

我正在使用Oracle 11g速成版,并尝试了许多不同的答案,但惨遭失败。我不知道为什么oracle在其SQL中没有限制条款

这是它在MYSQL中的样子:

select *
from emp
order by sal desc
limit 1,1

我已经看到了很多关于如何在 oracle 中使用 rownum 转换限制的答案,但找不到如何写偏移量。

我从StackOverflow得到了一个解决方案:

select * from emp
order by sal  desc
OFFSET 1 ROW FETCH NEXT 1 ROW ONLY;

但它给出了以下错误:

ORA-00933:SQL 命令未正确结束

任何人都可以建议我一些简单的解决方案。提前谢谢。

在旧版本的 Oracle 中,您需要一个子查询:

select c.*
from (select c.*, row_number() over (order by c.points desc) as seqnum
from customers c
) c
where seqnum = 2;

您将看到在外部查询中使用rownum的示例:

select c.*
from (select c.*
from customers c
) c
where rownum = 2;

但是,这不起作用,因为仅当行放置在结果集中时,rownum才会递增。 窗口函数是旧版本Oracle中最简单的解决方案(新版本支持fetch/offset(。

这就是最终对我有用的:

SELECT *
FROM   (SELECT sal, rownum AS rnum
FROM   (SELECT sal
FROM   emp
ORDER BY sal desc)
WHERE rownum <= 2)
WHERE  rnum > 1;

其中 1 是偏移量

有关更多详细信息,请参阅: 如何在 Oracle 11g 中的"选择"查询中添加偏移量?

感谢杰弗里·坎普和拉利特·库马尔·

最新更新