在SQL中选择下一行

3

我在我的数据库中有更多的记录。因此,我想选择前10,000条记录。然后我必须继续从下一条记录开始选择,也就是从第10,001条到某些值。如何在这里放置查询?

有任何想法对我都很有帮助。


"我有超过70,000条记录" - 恭喜!很快你就可以加入10万行俱乐部! - Mitch Wheat
搜索“高效分页”。 - user330315
Mitch Wheat先生在这里不会扮演喜剧角色。您需要参考常见问题解答。 - Duk
4个回答

5
如果您的表中没有ID行,或者ID不是自增的,您可以像这样使用ROW_NUMBER函数:
SELECT ROW_NUMBER() OVER (ORDER BY Products.ProductID) as 'rownbr', Products.ProductID
FROM Products
ORDER BY Products.ProductID

然后只需使用如下WHERE子句:

SELECT ROW_NUMBER() OVER (ORDER BY Products.ProductID) as 'rownbr', Products.ProductID
FROM Products
WHERE rownbr BETWEEN 10000 and 20000
ORDER BY Products.ProductID

什么问题?人们建议他使用WHERE ID >= 10001。但我没有看到他在表中说过有任何IDENTITY列。而且(@count - 10000)会返回他在第一万条记录之后的所有条目,而不是“从10,001到某些值”。 - Timofey G Morozov
没有人会说我有身份列。这是很常见的事情。如果他们没有身份列,就会提到它,因为这是不同的。只要理解流程即可。 - PoliDev
你可以从...中选择 %some_date%,并将其插入到 my_new_table 中,这样你就能得到许多你所需的数据,但没有标识列。这样你就可以使用 ROW_NUMBER。 - Timofey G Morozov

1

前10000个记录,再加上其余的记录;

SELECT TOP 10000 * FROM table ORDER BY Id
DECLARE @count int;
SET @count = (SELECT COUNT(*)  FROM table);
SELECT TOP (@count - 10000) * FROM table ORDER BY Id DESC;

这里发生了什么? - Lee Gunn
什么?这里发生了什么? - Duk
实际上,您首先选择前10000行,然后选择从第10001行到行数。 - Mehmet Ince
是的,正确的。这有什么问题吗? - Duk
1
抱歉评论不够清晰。第二个例子 SELECT TOP (COUNT(*) - 10000) 不会起作用,因为我认为你不能在 TOP 子句中使用表达式。但是,即使它能够工作;如果你有70,000行……它将返回前60,000行——不是吗? - Lee Gunn
尝试编辑后的解决方案 :) - Mehmet Ince

0

我猜你想从第10,001行开始选择

要获取接下来的1000行,你可以这样做:

SELECT TOP 1000 * FROM
TABLE
WHERE ID >= 10001

或者在 WHERE 中应用一个 AND 子句,这将返回第 10,001 - 15,001 行:

SELECT * FROM
TABLE
WHERE ID >= 10001 AND ID <= 15001


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接