另一个表中不存在的不同几何体

时间:2015-08-31 22:58:55

标签: sql sql-server

我使用的是Sql Server 2012,

我正在尝试做类似

的事情
SELECT T1.*
FROM (SELECT DISTINCT COMMUNITY FROM [TTDS].[dbo].[EXPORT_OUTPUT] WHERE COMMUNITY <> '') T1
    LEFT JOIN (SELECT City FROM [TTDS].[dbo].[CITY]) T2 ON (T1.COMMUNITY = T2.City)
WHERE T2.City IS NULL 

其中EXPORT_OUTPUT的字段COMMUNITY包含一堆重复值,这些重复值可能在CITY中,也可能不在COMMUNITY

例如a,a,a,a,b,b,c,d,e可能有CITYCityb,d,ea,c则会输出SELECT T1.* FROM ( SELECT cast(UNIQUE_GEOM as geometry) [geometry_field] FROM ( Select cast(Shape as varbinary(max)) as UNIQUE_GEOM FROM [TTDS].[dbo].[EXPORT_OUTPUT] UNION SELECT cast(Shape as varbinary(max)) FROM [TTDS].[dbo].[EXPORT_OUTPUT] ) GET_UNIQUE_GEOM ) T1 LEFT JOIN (SELECT [geometry] FROM [TTDS].[dbo].[LINKDIR_GEOMETRY]) T2 ON (T1.[geometry_field].STEquals(T2.[geometry]) = 1) WHERE T2.[geometry] IS NULL

这一切都很好。这是用例,但现在不是使用varchar字段,我想用几何来做。我的尝试有效,但非常慢。

T1

DISTINCT是来自EXPORT_OUTPUT的{​​{1}}几何图形的表格。

有什么更高效的方法呢?

1 个答案:

答案 0 :(得分:0)

您的问题是尝试geometry使用函数STEquals加入表格,因为这种比较需要时间特别没有索引。

对于设计数据库可能更有意义

使用字段geometry_objects + geometry_id

创建表格geom

在这种情况下,您只需geometry_id comunitycity