我使用的是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
可能有CITY
而City
。b,d,e
有a,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}}几何图形的表格。
有什么更高效的方法呢?
答案 0 :(得分:0)
您的问题是尝试geometry
使用函数STEquals
加入表格,因为这种比较需要时间特别没有索引。
对于设计数据库可能更有意义
使用字段geometry_objects
+ geometry_id
geom
在这种情况下,您只需geometry_id
comunity
和city