我有以下SQL语句:
SELECT [id], [name]
FROM [dbo.test_db_002] t1
LEFT JOIN [dbo.test_db_003] t2 ON t1.[id] = t2.[itmid]
ORDER BY t2.[iid] ASC;
这似乎很简单,但我不能弄明白。 我需要添加LIMIT N,M
将其从第N一个检索m个,但我一直围绕“限”字得到错误。 我试图把那个LIMIT
子句我到处可以在SQL语句中以上无济于事。
PS。 我正在写随VS2010的SQL Server。
为了回答您的查询,您可能希望:(取决于你的价值观M
和N
)
WITH cte AS
(
SELECT [id], [name], ROW_NUMBER() OVER (ORDER BY t2.[iid] ASC) AS rowNumber
FROM [dbo.test_db_002] t1
LEFT JOIN [dbo.test_db_003] t2 ON t1.[id] = t2.[itmid]
)
SELECT [id], [name]
FROM cte
WHERE rowNumber BETWEEN 3 AND 5
事情要留意,在之间的值BETWEEN N AND N + M
此外,这里的有关信息的链接公用表表达式这是WITH cte
我用的语法。
有没有直接等价于LIMIT N,M
在SQL Server中,但你可以做这样的事情:
SELECT * FROM
(SELECT *, ROW_NUMBER() OVER (ORDER BY name) as row FROM MyTable) a
WHERE row > 5 and row <= 10
看到这里的一些更多的信息: 在SQL Server“LIMIT”
您可以使用ROW_NUMBER()
例:
select * from
(
select cola, colb, row_number() over (order by col1 desc) as row
from table ) x
where row between value1 and value2
与SQL Server 2012中的偏移限制:
SELECT email FROM myTable
OFFSET 10 ROWS
FETCH NEXT 10 ROWS ONLY;
//偏移 - 没有。 跳过的行
//下一个 - 不需要。 旁行