为什么相关子查询不允许两个表达式 - SQL 服务器
Why correlated subquery doesn't allow two expressions - SQL Server
我有这样的查询:
select
objectid,
(select top 1 data_source, maxspeed
from SpeedLimitData3
where way_geometry.Filter(geography::STGeomFromText('POINT (' + cast(X as varchar(15)) + ' ' + cast(Y as varchar(15)) + ')', 4326)) = 1
order by way_geometry.STDistance(geography::STGeomFromText('POINT (' + cast(X as varchar(15)) + ' ' + cast(Y as varchar(15)) + ')', 4326))
)
from
testData
为什么 SQL 服务器抛出这个错误?
Msg 116, Level 16, State 1, Line 8
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
我知道这意味着我需要删除一个子查询的选定列。但是为什么当我有单行而不是几行作为子查询结果时?
这会起作用,但会在 select 的 otr.* 部分输出相同的数据。
您必须在 testData 中使用相关字段并应用相关性
select objectid, otr.*
from testData
outer apply
(
select top 1 data_source, maxspeed
from SpeedLimitData3
where way_geometry.Filter(geography::STGeomFromText('POINT (' + cast(X as varchar(15)) + ' ' + cast(Y as varchar(15)) + ')', 4326)) = 1
order by way_geometry.STDistance(geography::STGeomFromText('POINT (' + convert(varchar(15),X) + ' ' + convert(varchar(15),Y) + ')', 4326))
) otr
如果 X & Y 是 testData 中的字段
select tD.objectid, otr.*
from testData tD
outer apply
(
select top 1 data_source, maxspeed
from SpeedLimitData3
where way_geometry.Filter(geography::STGeomFromText('POINT (' + convert(varchar(15),tD.X) + ' ' + convert(varchar(15),tD.Y) + ')', 4326)) = 1
order by way_geometry.STDistance(geography::STGeomFromText('POINT (' + convert(varchar(15),tD.X) + ' ' + convert(varchar(15),tD.Y) + ')', 4326))
) otr
在 select 子句中使用的 select clause in Transact-SQL allows a <select-list>
made up of various entities. A correlated subquery 的语法是 expression
并为单个结果列提供值。
我有这样的查询:
select
objectid,
(select top 1 data_source, maxspeed
from SpeedLimitData3
where way_geometry.Filter(geography::STGeomFromText('POINT (' + cast(X as varchar(15)) + ' ' + cast(Y as varchar(15)) + ')', 4326)) = 1
order by way_geometry.STDistance(geography::STGeomFromText('POINT (' + cast(X as varchar(15)) + ' ' + cast(Y as varchar(15)) + ')', 4326))
)
from
testData
为什么 SQL 服务器抛出这个错误?
Msg 116, Level 16, State 1, Line 8
Only one expression can be specified in the select list when the subquery is not introduced with EXISTS.
我知道这意味着我需要删除一个子查询的选定列。但是为什么当我有单行而不是几行作为子查询结果时?
这会起作用,但会在 select 的 otr.* 部分输出相同的数据。 您必须在 testData 中使用相关字段并应用相关性
select objectid, otr.*
from testData
outer apply
(
select top 1 data_source, maxspeed
from SpeedLimitData3
where way_geometry.Filter(geography::STGeomFromText('POINT (' + cast(X as varchar(15)) + ' ' + cast(Y as varchar(15)) + ')', 4326)) = 1
order by way_geometry.STDistance(geography::STGeomFromText('POINT (' + convert(varchar(15),X) + ' ' + convert(varchar(15),Y) + ')', 4326))
) otr
如果 X & Y 是 testData 中的字段
select tD.objectid, otr.*
from testData tD
outer apply
(
select top 1 data_source, maxspeed
from SpeedLimitData3
where way_geometry.Filter(geography::STGeomFromText('POINT (' + convert(varchar(15),tD.X) + ' ' + convert(varchar(15),tD.Y) + ')', 4326)) = 1
order by way_geometry.STDistance(geography::STGeomFromText('POINT (' + convert(varchar(15),tD.X) + ' ' + convert(varchar(15),tD.Y) + ')', 4326))
) otr
在 select 子句中使用的 select clause in Transact-SQL allows a <select-list>
made up of various entities. A correlated subquery 的语法是 expression
并为单个结果列提供值。