2013-06-12 47 views
2

我有一張沒有PK欄的表格。我不應該改變這一點。還有一個可用於排序行的數字列。如何在不使用任何函數的情況下選擇前1行或前n行,即數據庫不可知的查詢?數據庫不可知的查詢來選擇top 1或前n行?

我看着這個查詢,但它並沒有對我的情況下工作 - Can there be a database-agnostic SQL query to fetch top N rows?

+2

可以使用(ANSI標準SQL)'ORDER BY someColumn OFFSET 0行FETCH NEXT 1行僅對;'但它不受所有DBMS支持。 –

+0

@ypercube - 旁白,想知道我們是否可以有一個SUPER SQL平臺和SUPER SQL語言作爲所有RDBMS的前端。您可以使用一種語言查詢所有數據庫...以及不同品牌的數據庫。這樣的事情存在嗎 ? –

回答

1

每你掛線,沒有太多的數據庫無關的解決方案的:

  • DB2 - select * from table order by col fetch first 10 rows only
  • 的Informix - select first 10 * from table order by col
  • 的Microsoft SQL Server和Access - select top 10 * from table order by col
  • MySQL和PostgreSQL - select * from table order by col limit 10
  • 的Oracle 8i中 - select * from (select * from table order by col) where rownum <= 10

http://forums.mysql.com/read.php?60,4515,4678

+0

我如何在上述每個查詢中按某個列進行訂單?當我們使用頂級或頂級查詢時,我認爲這是必須的。沒有它,上述查詢是部分有用的。在SQL服務器中,只需在from後添加一個按列的順序。那其他人呢? –

+0

@ sequel.learner:其他人一樣。 (請參閱ypercube的編輯) –

+1

@Denis:Postgres(從8.4)和SQL-Server(2012版)支持'OFFSET/FETCH'語法。 –