外部查询OrderBy不依赖于Inner Query的Resultset

时间:2013-04-29 06:52:06

标签: sql sql-server-2008 select sql-order-by

我对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

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

请评论我犯错的地方。

1 个答案:

答案 0 :(得分:4)

SQL Server没有任何意义按默认顺序填充。 在您的内部查询中,您没有指定顺序,因此它返回了错误的结果。 现在使用下面的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