我有2个数据集,消防栓(3381个记录)和街道中心线(6636个记录)。我想确定离每个消防栓记录最近的街道。
在一些SQL Server资源和教程之后,我整理了一个脚本,但它已经运行了一个多小时了。我理解最近的邻居可能需要一段时间才能运行,但似乎逻辑上可能存在错误。
select
h.OBJECTID,
st.FULL_ST_NAME
from WATER_HYDRANTS as h LEFT OUTER JOIN
STREET_CENTERLINES as st
on st.Shape.STDistance(h.SHAPE) is NOT NULL
ORDER BY st.Shape.STDistance(h.SHAPE) ASC
我认为逻辑中存在错误的原因是因为当我添加WHERE子句以仅选择一个具有ID的记录时,查询将返回整个数据集的列表。在ObjectID列中,它具有相同的值(例如,13992),并且在FULL_ST_NAME列中(我假设)是按照与要素的接近度排序的每条街道的列表。
select
h.OBJECTID,
st.FULL_ST_NAME
from WATER_HYDRANTS as h LEFT OUTER JOIN
STREET_CENTERLINES as st
on st.Shape.STDistance(h.SHAPE) is NOT NULL
where h.OBJECTID = '13992'
ORDER BY st.Shape.STDistance(h.SHAPE) ASC
理想情况下,objectID列中的每条记录都是唯一的,而FULL_ST_NAME列的街道最接近每个消防栓。
如果我能提供任何其他信息,请告诉我。我试图在我的解释中做到彻底,并在进入SO之前尝试进行尽职调查和研究。
由于