Maj*_*ati 61
用这个:
SELECT *
FROM Sales.SalesOrderHeader
ORDER BY OrderDate
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
Run Code Online (Sandbox Code Playgroud)
dzh*_*zhu 17
SQL Server:
select * from table
except
select top N * from table
Run Code Online (Sandbox Code Playgroud)
Oracle高达11.2:
select * from table
minus
select * from table where rownum <= N
with TableWithNum as (
select t.*, rownum as Num
from Table t
)
select * from TableWithNum where Num > N
Run Code Online (Sandbox Code Playgroud)
Oracle 12.1及更高版本(遵循标准ANSI SQL)
select *
from table
order by some_column
offset x rows
fetch first y rows only
Run Code Online (Sandbox Code Playgroud)
他们可能或多或少地满足您的需求.
没有直接的方法来做你想要的SQL.但是,在我看来,这不是一个设计缺陷.
SQL不应该像这样使用.
在关系数据库中,表表示关系,它是按定义设置的.集合包含无序元素.
另外,不要依赖记录的物理顺序.RDBMS无法保证行顺序.
如果记录的顺序很重要,最好在表中添加一个如"Num"的列,并使用以下查询.这更自然.
select *
from Table
where Num > N
order by Num
Run Code Online (Sandbox Code Playgroud)
Vik*_*ant 12
查询:in
SQL服务器
DECLARE @N INT = 5 --Any random number
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ID) AS RoNum
, ID --Add any fields needed here (or replace ID by *)
FROM TABLE_NAME
) AS tbl
WHERE @N < RoNum
ORDER BY tbl.ID
Run Code Online (Sandbox Code Playgroud)
这将给出表的行,其中rownumber开始于@N + 1.
小智 9
为了在SQL Server中执行此操作,您必须按列对查询进行排序,以便可以指定所需的行.
例:
select * from table order by [some_column]
offset 10 rows
FETCH NEXT 10 rows only
Run Code Online (Sandbox Code Playgroud)
那这个呢:
SELECT * FROM table LIMIT 50 OFFSET 1
Run Code Online (Sandbox Code Playgroud)
你想要LINQ中的东西跳过5并取10吗?
SELECT TOP(10) * FROM MY_TABLE
WHERE ID not in (SELECT TOP(5) ID From My_TABLE);
Run Code Online (Sandbox Code Playgroud)
此方法适用于任何SQL版本.
我知道现在回答查询已经很晚了。但是我有一个与其他解决方案略有不同的解决方案,我认为这些解决方案具有更好的性能,因为在SQL查询中不执行任何比较,仅完成排序。当SKIP值足够大时,您基本上可以看到其相当大的性能改进。
最佳性能,但仅适用于SQL Server 2012及更高版本。最初来自@Majid Basirati的回答,值得再次提及。
DECLARE @Skip INT = 2, @Take INT = 2
SELECT * FROM TABLE_NAME
ORDER BY ID ASC
OFFSET (@Skip) ROWS FETCH NEXT (@Take) ROWS ONLY
Run Code Online (Sandbox Code Playgroud)不如第一个好,但与SQL Server 2005及更高版本兼容。
DECLARE @Skip INT = 2, @Take INT = 2
SELECT * FROM
(
SELECT TOP (@Take) * FROM
(
SELECT TOP (@Take + @Skip) * FROM TABLE_NAME
ORDER BY ID ASC
) T1
ORDER BY ID DESC
) T2
ORDER BY ID ASC
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
94436 次 |
| 最近记录: |