我在SQL Server空间方面还是个新手。
我一直在使用2个空间数据库“点”(> 1m个条目)和“多边形”(> 800个条目)在SQL Server上运行作业
我想做的就是简单地创建一个布尔字段,该字段告诉我点是否落在多边形中。 我已经尝试了一些方法,但是没有任何决定性的或富有成效的方法。 我尝试过的查询是:
SELECT
points_id,
CASE
WHEN p1.GEOM.STWithin((p2.GEOM))=1
THEN 'yes'
ELSE 'no'
END as results
FROM [pointsdb] p1, [polydb] p2
我得到的结果基本上是1点到所有多边形的所有可能组合,反之亦然。 我尝试使用分组方式,但是效率下降了很多。
您能帮我吗? 欢呼
答案 0 :(得分:1)
请勿交叉连接表。相反,您可以将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