2013-07-10 49 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標準方法。 –

相關問題