Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从表中选择前N行_Mysql_Sql_Sql Server_Oracle - Fatal编程技术网

Mysql 从表中选择前N行

Mysql 从表中选择前N行,mysql,sql,sql-server,oracle,Mysql,Sql,Sql Server,Oracle,我正在进行一些分页,我需要进行一些查询,并从定义的切片中获取结果。 例如:我需要获得范围为20n

我正在进行一些分页,我需要进行一些查询,并从定义的切片中获取结果。 例如:我需要获得范围为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;