SQL Server中与MySQL Limit相当的功能

3

2
https://dev59.com/DXI95IYBdhLWcg3w1BlN - emboss
2
谢谢,但是没有用,因为它没有回答我的问题。 - Bellash
3个回答

6

试试这个:

SELECT * 
FROM 
( 
      SELECT *, 
        ROW_NUMBER() OVER (ORDER BY email) as rowNum 
      FROM tableName
) sub 
WHERE rowNum > 9 
  AND rowNum <= 9 + 20 
  AND id = 3

DEMO


1
我修复了你的查询以匹配 OP 的行为。在 MySQL 中,语法是 LIMIT offset, rowcount。这意味着你必须执行 rownum > offset and rownum <= offset + rowcount - Lukas Eder
所以,我看不到电子邮件列。 - Bellash
@AdaBell'hMonTrésor,不,你可以在SELECT语句中选择你想要的列,请参阅演示页面。 - Mahmoud Gamal

2
您可以使用ROW_NUMBER()来实现相同的结果。
例如,要获取第1行到第10行:
;WITH results AS
(    
    SELECT ROW_NUMBER() OVER (ORDER BY YourColumn ASC) AS RowNo,
        email
    FROM emailTable
)

SELECT * 
FROM results
WHERE RowNo BETWEEN 1 AND 10

编辑:

修改为一句话:

SELECT * 
FROM
(
    SELECT ROW_NUMBER() OVER (ORDER BY YourColumn ASC) AS RowNo,
        email
    FROM emailTable
) x
WHERE x.RowNo BETWEEN 1 AND 10

1
谢谢AdaTheDev,但你能简单点做吗?我的意思是只选择前20个id=3的用户的电子邮件,从第9个开始...也许你能理解我的意思。 - Bellash
这并不像没有LIMIT支持那么简单。虽然有其他的变体,但没有一个像LIMIT一样“基本”。例如,上面的内容可以被压缩成1个SELECT语句,就像我在答案中更新的那样。 - AdaTheDev

1

在SQL Server中使用偏移量限制:

SELECT email FROM emailTable WHERE id=3
OFFSET 8 ROWS
FETCH NEXT 12 ROWS ONLY;

//偏移量 - 跳过的行数

//下一个 - 需要的下几行数据

更新:此代码适用于SQL Server 2012及以上版本。


MS SQL Server 2012(尚未发布) - Marcus Adams
偏移量是要跳过的行数。他想要从第9行开始的结果。 - Somnath Muluk

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