MySQL 限制的 SQL Server 等效项 [重复]
Posted
技术标签:
【中文标题】MySQL 限制的 SQL Server 等效项 [重复]【英文标题】:The SQL Server equivalent for the MySQL Limit [duplicate] 【发布时间】: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
? 谢谢你的帮助
【问题讨论】:
***.com/questions/2135418/… 谢谢你,但它没有用,因为它没有回答我的问题 【参考方案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 > offset and rownum <= 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 的结果以上是关于MySQL 限制的 SQL Server 等效项 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 和 SQL Server 选择 (+) 等效项
SQL Server 2008 中的 SQL Server 2008 R2 中的 dm_os_volume_stats 等效项是啥?