3

我对 SQL 执行顺序没有深入的了解。

当我执行查询时

select top 2 * from Configuration 

它给了我

ABC1,100,Data001    
ABC2,200,Data002

当我执行查询时

select top 2 * from Configuration order by 1 desc

它给了我

XYZ1,400,Data100    
XYZ2,300,Data099

当我执行查询时

select * from (select top 2 * from Configuration) as a order by 1 desc

它给了我

XYZ1,400,Data100    
XYZ2,300,Data099

我的问题是为什么我得到

XYZ1,400,Data100    
XYZ2,300,Data099

作为输出

ABC1,100,Data001    
ABC2,200,Data002

据我所知,内部查询将向外部查询返回两行。外部查询将处理这两行

From->Where->group by->having->Select->Order by

执行顺序和将按预期将输出作为我提到的两行。但是外部查询的顺序是影响内部查询的整个表。

请评论我在哪里犯错。

4

1 回答 1

4

默认情况下,SQL Server 没有任何意义来填充 order by。在您的内部查询中,您没有指定 order by,因此它返回了错误的结果。现在将以下代码用于 SQL Server 2008 R2

SELECT * FROM (SELECT TOP 2 * FROM Configuration ORDER BY 1) AS a ORDER BY 1 DESC

另一种选择是: Comman Table Expression ,如下所示,

;WITH cteTest AS
(
    SELECT TOP 2 * 
    FROM Configuration ORDER BY 1
)
SELECT * FROM cteTest ORDER BY 1 DESC
于 2013-04-29T08:13:43.523 回答