在两个EXCEPT子句查询中使用ORDER BY

Thu*_*der 3 sql ansi-sql

我希望在ANSI SQL中实现分页查询。

我在SQL Server中尝试了以下查询,但不允许这样做:

select top 20 * from MyTable order by id  
except
select top 10 * from MyTable order by id
Run Code Online (Sandbox Code Playgroud)

但是以下工作正常:

select top 20 * from MyTable 
except
select top 10 * from MyTable order by id
Run Code Online (Sandbox Code Playgroud)

例如:

input   expected result
20      11
11      13
25      14
6       16
4       17
2       18
1       19
9       20
3       25
7       
8       
16      
17      
18      
13      
14      
19      
10      
5   
Run Code Online (Sandbox Code Playgroud)

从上面的示例可以看出,如果我们不能编写第一个ORDER BY子句,那么结果将不会具有值20、11、25。

dea*_*ean 6

我同意,这应该order bytop仍然产生一个表一起工作(因为正好order by产生一个游标,因此不能用作选择源)。

当然,您可以轻松解决此限制:

select * from (select top 20 * from MyTable order by id) x
except
select * from (select  top 10 * from MyTable order by id) y
Run Code Online (Sandbox Code Playgroud)


sio*_*orn 3

order by子句只需在运算符比较最后出现的查询之后出现一次exceptorder by是逻辑查询处理阶段中要评估的最后一个子句。

  • 使用“select...into”将“select top...order by”查询的结果插入到几个临时表中。然后执行“除了”。 (2认同)