我们正在尝试执行相当于LINQ select.Skip(50).Take(25)
的操作。这是针对可以击中任何SQL数据库的库。所以...是否有执行Skip()和Take()的SQL选择限定符
- 是否有一个标准的SQL select子句可以做到这一点? (Pretty sure the answer is no)
- 如果没有,是否有办法专门为Access,DB2,MySql,Oracle,PostgreSQL,& Sql Server?如果是这样,那么对于每个供应商来说如何?
我们正在尝试执行相当于LINQ select.Skip(50).Take(25)
的操作。这是针对可以击中任何SQL数据库的库。所以...是否有执行Skip()和Take()的SQL选择限定符
对于MySQL,使用LIMIT。有一个参数,它是返回的行数。有两个参数,它是跳过的行数,然后是要返回的行数。
有关详细信息和示例,请参阅http://dev.mysql.com/doc/refman/5.5/en/select.html。
在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
使用窗口函数**是执行此操作的ANSI标准方法。 –
MySQL:'限制50,25'。通过一点努力,您可以在每个数据库引擎中使用ROWNUMBER和PARTITION查询来执行此操作。 –
'row_number' *是一种标准的SQL方式,但MySQL和Access都不支持它。 –
您很难在Access和其他引擎之间找到标准化。 –