【发布时间】:2016-01-29 22:54:44
【问题描述】:
我有这样的查询:
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 Server 会抛出这个错误?
消息 116,第 16 级,状态 1,第 8 行
当子查询不使用 EXISTS 引入时,选择列表中只能指定一个表达式。
我知道这意味着我需要删除子查询的选定列之一。但是为什么当我有单行作为子查询结果而不是多行时?
【问题讨论】:
-
只需将您的内部选择移动到 from 部分并使其交叉应用,它会做同样的事情并且您可以拥有多个列
-
@JamesZ 我已经这样做了。我的问题是为什么在相关子查询中不能有多个表达式?
-
你的表达式在 SELECT 区域,这里只有标量。
-
@DimaSUN 我以为列+两列的行=三列,但似乎不是:)
-
c 我的答案在这里
标签: sql-server tsql subquery correlated-subquery