Mysql 从表中选择前N行
我正在进行一些分页,我需要进行一些查询,并从定义的切片中获取结果。 例如:我需要获得范围为20nMysql 从表中选择前N行,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,我正在进行一些分页,我需要进行一些查询,并从定义的切片中获取结果。 例如:我需要获得范围为20n
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;
现在我需要按名为ID的列进行滑动
有什么建议吗?我需要在mysql、mssql和oracle上运行我的查询。在mysql中,您可以使用以下命令从第20行开始获得10行:
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC
LIMIT 10 OFFSET 20 --Equivalent to LIMIT 20, 10
假设您的页面大小为20记录,并且您希望获得第2页,下面是您将如何做到这一点: SQL Server、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,您也可以检查此链接 从
master\u question
中选择*其中1个订单由question\u id
ASC限制20
在SQL Server 2012中,您可以使用本机分页,以获得一致性和最佳性能: 您的查询变成:
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;
OFFSET 20 ROWS
FETCH NEXT 20 ROWS ONLY;
请参见
限制
条款为什么否决?为什么不把你的评论写在回答中呢?这么多问题。我相当肯定你不会得到任何在所有3个方面都有效的东西。您必须在Oracle中使用rownum
。@本:您是对的fetchfirst#ROWS
现在是ANSI,但DB2IIRC是目前唯一支持它的。您尝试过搜索吗?(如此多的前n个分页问题)
select * from table_name LIMIT 100
SELECT * FROM Reflow
WHERE ReflowProcessID = somenumber
ORDER BY ID DESC;
OFFSET 20 ROWS
FETCH NEXT 20 ROWS ONLY;