Sql Oracle不支持TOP
我们不能在ORACLE的SQL中使用TOP命令来获取前n个排序行,因为它不支持它。但也有使用rank和rownum获得结果的方法,但这需要内部查询。我想知道除了在内部查询中使用rownum/rank之外,是否还有其他方法。我不知道rownum是什么。最好的办法是@PinnyM删除的答案Sql Oracle不支持TOP,sql,database,oracle,Sql,Database,Oracle,我们不能在ORACLE的SQL中使用TOP命令来获取前n个排序行,因为它不支持它。但也有使用rank和rownum获得结果的方法,但这需要内部查询。我想知道除了在内部查询中使用rownum/rank之外,是否还有其他方法。我不知道rownum是什么。最好的办法是@PinnyM删除的答案 select * from (<your query here> order by <your ordering> ) t where rownum < xx
select *
from (<your query here>
order by <your ordering>
) t
where rownum < xx
这比使用row_number或rank要好得多,因为rownum需要对值进行最少的处理
顺便说一下,TOP是特定于SQL Server和Sybase的。使用LIMIT的其他数据库。Oracle 12c将具有FETCH FIRST和OFFSET。如果你能等那么久;我不明白为什么某些产品/环境要花这么长时间才能获得让开发人员更快乐的功能。@pst最近开始使用PostgreSQL而不是Oracle,我认为Oracle的优先级有所不同。PostgreSQL升级的主要受众是开发社区,但对于Oracle来说,它是整个商业社区,因此更强调大规模功能和性能,而不是开发人员的便利性。@Davidadridge噢,我不是说不要使用那些花费$$的企业功能,但我的意思是,花一小部分的时间让工作变得愉快。而甲骨文有足够的资金/资源/时间来做这件事。当然,许多企业产品线也是如此。@pst看起来他们可能从12c中得到了这个消息。这仍然是一个子查询,或者确切地说是OP不想要的派生表。@a_horse_,没有名字。问题是,他/她不希望rownum出现这种情况。我不知道那是什么。我假设OP是指行数乘以行数