【问题标题】:The SQL Server equivalent for the MySQL Limit [duplicate]MySQL 限制的 SQL Server 等效项 [重复]
【发布时间】:2012-03-04 21:29:13
【问题描述】:

可能重复:
Equivalent of LIMIT and OFFSET for SQL Server?

这是一个mysql查询

SELECT email FROM emailTable LIMIT 9,20 WHERE id=3

如何在 SQL Server (2008) 中编写它?

一定要写吗

SELECT TOP 9,20 email FROM emailTable WHERE id=3

? 谢谢你的帮助

【问题讨论】:

标签: mysql sql sql-server-2008


【解决方案1】:

试试这个:

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

【讨论】:

  • 我修复了您的查询以匹配 OP 的行为。在 MySQL 中,语法是 LIMIT offset, rowcount。这意味着你必须这样做rownum &gt; offset and rownum &lt;= offset + rowcount
  • @LukasEder,感谢您的编辑。
  • 所以,我看不到电子邮件列
  • @AdaBell'hMonTrésor,不,您可以在 select 子句中选择您想要的列,请参阅演示页面。
  • 谢谢你 - 也帮助了我
【解决方案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

编辑: 浓缩成1条语句:

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

【讨论】:

  • 谢谢AdaTheDev,但你能做到吗?我的意思是只为 20 个 id=3 的第一批用户选择电子邮件,从第 9 个开始......也许你能很好地抓住我
  • 它并不像不支持 LIMIT 那样简单。这还有其他变体,但没有一个像 LIMIT 那样“基本”。例如以上内容可以浓缩为 1 条 SELECT 语句,如我的回答中所更新
【解决方案3】:

sql server 中的偏移量限制:

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

//偏移量 - 不。跳过的行数

//下一个 - 必需的编号。下一行

更新:这是有效的,但 sql server 2012 起

【讨论】:

  • MS SQL Server 2012(尚未发布)
  • 这就是我要找的!非常感谢亚当斯,但是 ...
  • 偏移量为否。的行想要跳过。他想要 9 的结果
猜你喜欢
  • 2023-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-03-04
  • 2016-08-02
  • 2013-10-07
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
相关资源
最近更新 更多