从表中选择前 N 行
Posted
技术标签:
【中文标题】从表中选择前 N 行【英文标题】:select the TOP N rows from a table 【发布时间】:2012-02-27 08:28:15 【问题描述】:我正在进行一些分页,我需要进行一些查询并获取定义的结果表单 slicing 。 例如:我需要获取 20n
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;
现在我需要按 ID 列滑动。
有什么建议吗?我需要在 mysql、mssql 和 oracle 上运行我的查询。
【问题讨论】:
见LIMIT
子句dev.mysql.com/doc/refman/5.1/en/select.html
为什么投反对票?为什么不将您的评论放在答案中?这么多问题。
我很确定你不会得到任何适用于所有 3 的东西。你必须在 Oracle 中使用 rownum
。
@Ben:你是对的。 FETCH FIRST # ROWS
现在是 ANSI,但 DB2 IIRC 是目前唯一支持它的。
你试过搜索吗? (这么多 top-n 分页问题)
【参考方案1】:
在 MySql 中,您可以使用以下命令从第 20 行开始获取 10 行:
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC
LIMIT 10 OFFSET 20 --Equivalent to LIMIT 20, 10
【讨论】:
【参考方案2】:假设您的页面大小为 20 条记录,并且您想要获得第 2 页,您可以这样做:
SQL 服务器、甲骨文:
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
【讨论】:
【参考方案3】:select * from table_name LIMIT 100
记住这只适用于 MYSQL
【讨论】:
【参考方案4】:您也可以查看此链接
SELECT * FROM master_question
WHERE 1 ORDER BY question_id
ASC LIMIT 20
for more detail click here
【讨论】:
【参考方案5】:从 SQL Server 2012 开始,您可以使用本机分页以获得简洁性和最佳性能:
https://docs.microsoft.com/en-us/sql/t-sql/queries/select-order-by-clause-transact-sql?view=sql-server-ver15#using-offset-and-fetch-to-limit-the-rows-returned
您的查询变为:
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;
OFFSET 20 ROWS
FETCH NEXT 20 ROWS ONLY;
【讨论】:
以上是关于从表中选择前 N 行的主要内容,如果未能解决你的问题,请参考以下文章