我們正在嘗試執行相當於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和其他引擎之間找到標準化。 –