多个多边形上的多个点 SQL 服务器空间
Multiple points on multiple polygons SQL Server Spatial
我是 SQL 服务器空间方面的新手。
我已经 运行 在 SQL 服务器上使用 2 个空间数据库 "points"(>1m 条目)和 "polygons"(>800 条目)
我想做的只是创建一个布尔字段,告诉我一个点是否落在多边形中。
我尝试了一些事情,但没有任何结论或成果。
我试过的查询是:
SELECT
points_id,
CASE
WHEN p1.GEOM.STWithin((p2.GEOM))=1
THEN 'yes'
ELSE 'no'
END as results
FROM [pointsdb] p1, [polydb] p2
我得到的结果基本上是1点到所有多边形的所有可能组合,反之亦然。
我尝试使用 group by 但效率下降了很多。
你能帮我吗?
干杯
不要交叉连接表。相反,您可以使用带有相关子查询的 exists
条件,如下所示:
SELECT
points_id,
CASE
WHEN EXISTS (
SELECT 1
FROM [polydb] p2
WHERE p1.GEOM.STWithin((p2.GEOM))=1
)
THEN 'yes'
ELSE 'no'
END as results
FROM [pointsdb] p1
我是 SQL 服务器空间方面的新手。
我已经 运行 在 SQL 服务器上使用 2 个空间数据库 "points"(>1m 条目)和 "polygons"(>800 条目)
我想做的只是创建一个布尔字段,告诉我一个点是否落在多边形中。 我尝试了一些事情,但没有任何结论或成果。 我试过的查询是:
SELECT
points_id,
CASE
WHEN p1.GEOM.STWithin((p2.GEOM))=1
THEN 'yes'
ELSE 'no'
END as results
FROM [pointsdb] p1, [polydb] p2
我得到的结果基本上是1点到所有多边形的所有可能组合,反之亦然。 我尝试使用 group by 但效率下降了很多。
你能帮我吗? 干杯
不要交叉连接表。相反,您可以使用带有相关子查询的 exists
条件,如下所示:
SELECT
points_id,
CASE
WHEN EXISTS (
SELECT 1
FROM [polydb] p2
WHERE p1.GEOM.STWithin((p2.GEOM))=1
)
THEN 'yes'
ELSE 'no'
END as results
FROM [pointsdb] p1