针对子查询的查询产生与单独运行子查询不同的结果
问题描述:
我有一个使用子查询来查询数据子集的查询,然后我试图从子查询中选择特定的数据。子查询:针对子查询的查询产生与单独运行子查询不同的结果
select top 10 Build_ID, Appscan_Definitive_High,
rank() over (order by Appscan_Definitive_High desc) as rankpct
from
(
select build_id, convert(int,appscan_definitive_high) as
appscan_definitive_high
from dbo.SDFBuildMetrics
where coalesce(appscan_definitive_high,0)>0
) a
,并从该结果是:
Build_ID Appscan_Definitive_High rankpct
31966 51 1
32627 51 1
44293 51 1
47011 51 1
47968 51 1
48554 51 1
25586 49 7
27370 49 7
40357 48 9
23867 44 10
但是当我运行兑子查询的查询:
select Appscan_Definitive_High
from
(
select top 10 Build_ID, Appscan_Definitive_High,
rank() over (order by Appscan_Definitive_High desc) as rankpct
from
(
select build_id, convert(int,appscan_definitive_high) as
appscan_definitive_high
from dbo.SDFBuildMetrics
where coalesce(appscan_definitive_high,0)>0
) a
) aa
我得到:
Appscan_Definitive_High
1
44
21
44
2
44
2
6
7
7
完整查询的最终目的是r etrieve min(AppScan_Definitive_High),但由于返回的值集合与子查询返回的值集合不匹配,min函数并不能提供我需要的值。我假设子查询返回外部查询操作的一组数据,但在上例中似乎不是这种情况。
对此有何帮助?
答
您正在运行未选择排序的前10名。为了得到你想要的结果,你需要在那里订购。
呵呵。 a)我不认为你可以通过子查询指定顺序,b)我不确定我明白为什么这很重要。如果子查询返回如第一个示例中所示的一组数据,那么外部查询操作的是什么?它的工作原理,但我不完全确定为什么... – 2015-02-10 15:28:24
你可以(也可能应该)始终用顶部指定顺序。如果你不是SQL Server可以跳过的东西,或者例如并行性会导致不同类型的结果。实际执行计划可能会揭示为什么发生这种情况 – 2015-02-10 15:44:26