【发布时间】:2019-07-29 15:21:20
【问题描述】:
我有两个表(a,b),都有一个形状或几何字段。我希望在表 a 上插入后运行触发器以从表 b 中找到(单个)最近的空间记录。我调查了 STDistance 函数,但运气不佳。表 a 是唯一的。
插入后
表一
OBJECTID,RoadID
12345,NULL
表 b
AssetID
RD12345
RD12233
RD12333
RD12222
STDistnace 会说 Table a.OBJECTID 12345 最接近 Table b.AssetID = RD12222
结果
表一
OBJECTID,RoadID
12345,RD12222
我已经完成了一些初步测试,它返回了所有匹配的记录(来自两个表),但我试图将其压缩为仅具有最短距离的匹配记录,因此是 STDistance 上的聚合函数(MIN)。
SELECT TableA.AssetID,MIN(TableA.Shape.STDistance(TableB.Shape)) AS DIST, TableB.AssetID AS RoadID
FROM TableA, TableB
GROUP BY TableA.AssetID, TableB.AssetID
HAVING MIN(TableA.Shape.STDistance(TableB.Shape)) < 250
ORDER BY AssetID
我得到的结果是所有记录的多对多关系。如果我应用聚合函数(MIN),我可以显着减少它,但是唯一 id 的表仍然重复。该计划是一旦 select 语句起作用,我会将其转换为我的触发器 - 我希望答案基于它在触发器中的实现方式。
【问题讨论】:
-
Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI
JOIN语法-92 SQL 标准(25 多年前),不鼓励使用它 -
谢谢 marc_s。 SELECT a.assetid,b.Assetid AS ROAD, b.shape.STDistance(a.shape) AS DIST FROM sde.TableA a join sde.TableB b on b.shape.STDistance(a.shape)
-
12345 与表 b.AssetID = RD12222 的距离如何?
-
通过利用 STDistance 函数here 两个表都有一个几何字段。
标签: sql sql-server spatial-query