我对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
执行顺序,并将输出作为我预期提到的两行输出。但是外部查询的顺序正在影响整个内部查询表。
请评论我犯错的地方。
答案 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