2013-07-10 27 views
4

我们正在尝试执行相当于LINQ select.Skip(50).Take(25)的操作。这是针对可以击中任何SQL数据库的库。所以...是否有执行Skip()和Take()的SQL选择限定符

  1. 是否有一个标准的SQL select子句可以做到这一点? (Pretty sure the answer is no
  2. 如果没有,是否有办法专门为Access,DB2,MySql,Oracle,PostgreSQL,& Sql Server?如果是这样,那么对于每个供应商来说如何?
+1

MySQL:'限制50,25'。通过一点努力,您可以在每个数据库引擎中使用ROWNUMBER和PARTITION查询来执行此操作。 –

+1

'row_number' *是一种标准的SQL方式,但MySQL和Access都不支持它。 –

+0

您很难在Access和其他引擎之间找到标准化。 –

回答

5

在DB2中,有没有很喜欢在MySQL LIMIT一个简单的条款,虽然可以使MySQL的兼容性,当你在DB2用于Linux/UNIX/Windows的:

db2set DB2_COMPATIBILITY_VECTOR=MYS 
db2stop 
db2start 

或者,你可以使用ROW_NUMBER()窗口函数得到类似的东西:

SELECT * FROM (
    SELECT 
     ROW_NUMBER() OVER (ORDER BY id) AS rn 
     ,S.* 
    FROM your_table AS S 
) AS A 
WHERE rn BETWEEN 10 AND 20 
+0

使用窗口函数**是执行此操作的ANSI标准方法。 –

相关问题