【发布时间】:2020-09-06 23:53:05
【问题描述】:
我需要将一列传递给子查询进行过滤,但我似乎无法让它工作。
我知道如果我的子查询要返回一个列,那么我可以重新排列我的查询并且它会起作用,但我需要子查询返回 3 列。
到目前为止,这是我的查询及其抱怨:
where c.location.STDistance(l.location) is not null
order by c.Location.STDistance(l.location)
与
无法绑定多部分标识符“l.location”。
select
l.*, city.*
from
listings l,
(select top 1 c.UnicodeName, c.name, r.code as region, cn.code as country
from cities c
inner join regions r on r.regionid = c.regionid
inner join Countries cn on cn.CountryId = r.countryid
where c.location.STDistance(l.location) is not null
order by c.Location.STDistance(l.location)) as city
实际计划 https://www.brentozar.com/pastetheplan/?id=BkiRk-74P
城市和列表索引
CREATE SPATIAL INDEX [256_HHHH] ON [dbo].[Listings]
(
[Location]
)USING GEOGRAPHY_GRID
WITH (GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH),
CELLS_PER_OBJECT = 256, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
CREATE SPATIAL INDEX [16_HHHH] ON [dbo].[Listings]
(
[Location]
)USING GEOGRAPHY_GRID
WITH (GRIDS =(LEVEL_1 = HIGH,LEVEL_2 = HIGH,LEVEL_3 = HIGH,LEVEL_4 = HIGH),
CELLS_PER_OBJECT = 16, PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
【问题讨论】:
-
您别名为
city的子查询几乎感觉它属于select 子句。 -
我试过了,但是一旦它在选择它抱怨子查询必须只返回一列,而我的返回 3 (city.*)
标签: sql-server tsql join sql-order-by