我对数据库很陌生,已经开始学习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命令未正确结束
有人能给我一些简单的解决办法吗。提前谢谢。
发布于 2019-09-23 12:19:13
在旧版本的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)。
发布于 2019-09-23 13:07:13
这就是我终于成功的原因:
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
https://stackoverflow.com/questions/58062259
复制相似问题