2012-02-05 76 views
21

我正在做一些分頁,我需要做一些查詢並得到結果表單定義的分片。 例如:我需要在範圍內20N所有「頂」行< X < 40N等從表中選擇TOP N行

SELECT * FROM Reflow 
WHERE ReflowProcessID = somenumber 
ORDER BY ID DESC; 

,現在我需要讓我的列名爲ID滑動。

有什麼建議怎麼樣?我需要在mysql,mssql和oracle上運行我的查詢。

+2

查看LIMIT條款http://dev.mysql.com/doc/refman/5.1/en/select.html – 2012-02-05 15:19:22

+0

爲什麼downvote?爲什麼不把你的評論放在答案中?這麼多的問題。 – Matthias 2012-02-05 15:25:52

+1

我相當肯定你不會得到任何可以工作的東西3.你必須在Oracle中使用'rownum'。 – Ben 2012-02-05 15:31:36

回答

36

假設你的頁面大小爲20的記錄,你想獲得第2號,這裏是你會怎麼做:

SQL服務器,Oracle:

SELECT * -- <-- pick any columns here from your table, if you wanna exclude the RowNumber 
FROM (SELECT ROW_NUMBER OVER(ORDER BY ID DESC) RowNumber, * 
     FROM Reflow 
     WHERE ReflowProcessID = somenumber) t 
WHERE RowNumber >= 20 AND RowNumber <= 40  

的MySQL:

SELECT * 
FROM Reflow 
WHERE ReflowProcessID = somenumber 
ORDER BY ID DESC 
LIMIT 20 OFFSET 20 
15

在MySQL中,你可以得到10行從行20使用開始:

SELECT * FROM Reflow 
WHERE ReflowProcessID = somenumber 
ORDER BY ID DESC 
LIMIT 10 OFFSET 20 --Equivalent to LIMIT 20, 10