2013-06-12 22 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'语法。 –