3 回答
TA贡献2051条经验 获得超10个赞
SELECT TOP n *
FROM tablename
WHERE key NOT IN (
SELECT TOP x key
FROM tablename
ORDER BY key
DESC
);
TA贡献1839条经验 获得超15个赞
这是仅在Sql Server 2005及更高版本中有效的另一种解决方案,因为它使用except语句。但是我还是分享。如果要获取记录50-75,请输入:
select * from (
SELECT top 75 COL1, COL2
FROM MYTABLE order by COL3
) as foo
except
select * from (
SELECT top 50 COL1, COL2
FROM MYTABLE order by COL3
) as bar
TA贡献1801条经验 获得超8个赞
仅在需要LIMIT时,ms sql具有等效的TOP关键字,因此很清楚。当您需要使用OFFSET进行LIMIT时,您可以尝试使用如前所述的一些技巧,但是它们都会增加一些开销,例如,用于订购一种方式然后再订购另一种方式,或者昂贵的NOT IN操作。我认为不需要所有这些级联。在我看来,最干净的解决方案是在SQL端使用无偏移的TOP,然后使用适当的客户端方法(如php中的mssql_data_seek)寻求所需的起始记录。尽管这不是纯SQL解决方案,但我认为这是最好的解决方案,因为它不会增加任何开销(跳过的记录在您经过它们时将不会在网络上传输,如果您担心的话) )。
- 3 回答
- 0 关注
- 727 浏览
添加回答
举报