【问题标题】:Oracle 11g and SQL TOP queryOracle 11g 和 SQL TOP 查询
【发布时间】:2016-10-04 03:18:41
【问题描述】:

虽然使用SELECT TOP 5 * FROM SOMETABLE 给我一个错误

ORA-00923:FROM 关键字未在预期位置找到

我正在使用 Oracle 11g 。我知道使用 rownum 做同样的事情,但只是想知道 Oracle 根本不支持 SQL TOP 使用?为了使 SQL TOP 在 Oracle 中工作需要做任何额外的事情吗?

【问题讨论】:

  • 是的... TOP 是不行的。但我想 Google 叔叔也会告诉你的……

标签: sql oracle11g


【解决方案1】:

Oracle 不支持TOP。使用ROWNUM

SELECT * FROM your_table
WHERE ROWNUM <= 5

SQLFiddle example

【讨论】:

  • 感谢您提供有关 SQLFiddle 的信息 :) :)
  • @Oracle:SQL 旨在成为一种标准。表现得像一个人!
【解决方案2】:

不,Oracle 不支持TOP

正如您所指出的,最好的方法是使用rownum。另一种选择是解析函数ROW_NUMBER

【讨论】:

    【解决方案3】:

    rownum 关键字,虽然它让你说不。的记录,只有在应用 order by 子句(如果有的话)之后才会这样做。

    因此,如果 SQL 服务器查询如下所示,它将为您提供 10 条最近创建的记录。

    Select TOP 10 * from mytable order by created_date desc
    

    但是为了适应 Oracle,当您编写此代码时,它会为您获取 10 条记录(可能不是最新的)并按降序排列它们,这不是您想要的。

    Select * from mytable where rownum < 10 order by created_date desc
    

    因此,使用这样的附加选择进行编写会有所帮助:

    SELECT * FROM (Select * from mytable order by created_date desc) where rownum < 10 
    

    【讨论】:

      【解决方案4】:

      SQL TOP 不适用于 Oracle。

      【讨论】:

      • -1 : 这没有帮助...如果这是有帮助,为什么不提供正确的方法?比如如何使用rownum或者ROW_NUMBER()这个例子?
      • @Dems,它说它已经知道 rownum,他问“Oracle 是否完全不支持”。如果我已经解释了 rownum,可能会有人因此而投反对票。如果我回答了它的问题,我真的不明白为什么要投反对票。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      相关资源
      最近更新 更多