我要選擇一個範圍,從X1到X2。就像你可以選擇最好的結果:
SELECT TOP X * FROM TABLE
SELECT TOP 5 * FROM tUsers
但我想選擇中間結果。所以如果我想要結果10-20有沒有一種方法來查詢?
SELECT 10-20 * FROM TABLE?
我要選擇一個範圍,從X1到X2。就像你可以選擇最好的結果:
SELECT TOP X * FROM TABLE
SELECT TOP 5 * FROM tUsers
但我想選擇中間結果。所以如果我想要結果10-20有沒有一種方法來查詢?
SELECT 10-20 * FROM TABLE?
有了SQL Server:
隨着MySQL的:
SELECT * FROM `your_table` LIMIT 10, 20
藉助Oracle:
SELECT * FROM `your_table` WHERE rownum >= 10 and rownum < 20;
在PostgreSQL :
SELECT * FROM `your_table` LIMIT 20 OFFSET 10
`your_table`必須由真正的表名來代替
在Oracle和PostgreSQL中反引號是非法的(實際上除了MySQL之外的任何數據庫) - 即使對於MySQL示例 – 2011-04-02 21:13:25
\ your_table \必須替換爲真實表名稱,它們也是不必要的... – 2011-04-02 21:16:13
但反引號仍然非法(和非標準) – 2011-04-02 21:17:58
你在用什麼數據庫?如果你在Oracle中,嘗試
where rownum >= 10 and rownum < 20;
這將不起作用 - rownum必須使用派生表進行評估:select * from(從your_table中選擇col_!,rownum作爲rn),其中rn> = 10且rn <20; – 2011-04-02 21:17:33
在MySQL這是
SELECT * FROM table LIMIT 10,20
在SQL Server 2005或以上,你可以使用一個CTE
和ROW_NUMBER
功能:
WITH TblCte as
(
SELECT *
,ROW_NUMBER() OVER (ORDER BY OrderCol) RowNumber
FROM Table
)
SELECT *
FROM TblCte
WHERE RowNumber between 10 and 20
在SQL Server 2000或更低版本中,這是相當困難的,我nefficient: http://social.msdn.microsoft.com/Forums/en-IE/transactsql/thread/e92d9b03-42ad-4ab9-9211-54215e7b9352
你使用什麼數據庫發行版? (如SQL Server,MySQL等) – 2011-04-02 21:00:23
重複的:http://stackoverflow.com/questions/187998/row-offset-in-ms-sql-server,http://stackoverflow.com/questions/2135418/equivalent -of-limit-and-offset-for-sql-server – intgr 2011-04-02 21:00:25
@Karl:SQL Server,因爲其他數據庫不支持'SELECT TOP'語法 – intgr 2011-04-02 21:01:52