从表中选择前 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 行的主要内容,如果未能解决你的问题,请参考以下文章

在 MariaDB 中,如何从表中选择前 10 行?

如何从表中删除除前两个和最后一个之外的所有行?

TSQL 从表中选择最后 10 行?

从表中随机选择行 - Python Pandas 读取 SQL

从表中选择行,使其列的计算值总和小于给定限制

在检查行是不是已存在时,选择不会从表中获取任何内容