首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle 11g中的限制条款

Oracle 11g中的限制条款
EN

Stack Overflow用户
提问于 2019-09-23 12:16:47
回答 2查看 2.4K关注 0票数 0

我对数据库很陌生,已经开始学习SQL了。我正在尝试将MySQL查询转换为使用oracle数据库。

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

在MYSQL中如下所示:

代码语言:javascript
复制
select *
from emp
order by sal desc
limit 1,1

对于如何使用oracle中的rownum来转换限制,我已经看到了许多答案,但是无法找到如何编写偏移量。

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

代码语言:javascript
复制
select * from emp
order by sal  desc
OFFSET 1 ROW FETCH NEXT 1 ROW ONLY;

但是它给出了以下错误:

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

有人能给我一些简单的解决办法吗。提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-23 12:19:13

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

代码语言:javascript
复制
select c.*
from (select c.*, row_number() over (order by c.points desc) as seqnum
      from customers c
     ) c
where seqnum = 2;

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

代码语言:javascript
复制
select c.*
from (select c.*
      from customers c
     ) c
where rownum = 2;

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

票数 1
EN

Stack Overflow用户

发布于 2019-09-23 13:07:13

这就是我终于成功的原因:

代码语言:javascript
复制
SELECT *
FROM   (SELECT sal, rownum AS rnum
        FROM   (SELECT sal
                FROM   emp
                ORDER BY sal desc)
        WHERE rownum <= 2)
WHERE  rnum > 1;

其中1被抵消

有关更多细节,请参见:How to add offset in a "select" query in Oracle 11g?

感谢Jeffrey Kemp和Lalit Kumar B

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58062259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档