2012-10-31 54 views
1

在使用SELECT TOP 5 * FROM SOMETABLE給我一個錯誤的Oracle 11g和SQL查詢TOP

ORA-00923:FROM關鍵字未找到預期

我使用Oracle 11g。我知道使用rownum來做同樣的事情,但只是想知道SQL TOP的用法在Oracle中完全不受支持?任何需要做額外的事情來使SQL TOP在Oracle中工作?

+0

燁...... TOP是沒有去。但我認爲谷歌大叔會告訴你,太... – ppeterka

回答

8

Oracle不支持TOP。使用ROWNUM

SELECT * FROM your_table 
WHERE ROWNUM <= 5 

SQLFiddle example

+0

感謝提供有關SQLFiddle :) :)信息 – neo

+1

@Oracle:SQL意欲是一個標準。行爲就像是一個! – Bitterblue

-1

SQL TOP不適用於Oracle。

+1

-1:這是不是有幫助......如果這是有幫助的*** ***爲什麼不能提供正確的方法是什麼?比如**這個例子中如何使用**'rownum'或'ROW_NUMBER()'? – MatBailie

+0

@Dems,它說它已經知道rownum,他問「Oracle中是否完全不支持」。如果我已經解釋了關於rownum的話,可能會有人因爲這個原因而也可能因此而倒下。如果我回答了它的問題,真的不明白爲什麼降低投票率。 – richardtz

2

不,Oracle不支持TOP

正如您所指出的,最好的方法是使用rownum。另一種選擇是分析功能ROW_NUMBER

0

關鍵字rownum,雖然它讓你說不。的記錄,只有在應用了order by條款後纔有這種記錄。

所以如果SQL Server查詢如下,它會給你10個最近創建的記錄。

Select TOP 10 * from mytable order by created_date desc 

但適合甲骨文,當你寫這篇文章,它可以讓你的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