我遇到了一个比较棘手的问题。我需要基于几何形状(有些人在复制和粘贴时没有意识到重复使用相同的几何形状)选择SQL空间表中的所有重复项。
我需要选择除具有相同几何形状的最低ID之外的所有重复项。
我需要选择除具有相同几何形状的最低ID之外的所有重复项。
SELECT tbl1.OBJECTID, tbl2.OBJECTID
FROM your_table tbl1
JOIN yout_table tbl2 ON tbl1.your_geometry_field.STEquals(tbl2.your_geometry_field) = 1
WHERE tbl1.OBJECTID <> tbl2.OBJECTID
ORDER BY tbl1.OBJECTID
这将给你所有的重复项。
WITH C AS(
SELECT ROW_NUMBER() OVER (PARTITION BY CAST(your_geometry_field AS VARBINARY(MAX))
ORDER BY CAST(your_geometry_field AS VARBINARY(MAX)) AS Rn
FROM your_table
)
SELECT * FROM C WHERE Rn != 1
VARBINARY(MAX)
怎么样? - sqluserSELECT tbl1.id, tbl2.id
FROM HEXA_GRID_SP tbl1,
HEXA_GRID_SP tbl2
where SDO_EQUAL(tbl1.geometry,tbl2.geometry) = 'TRUE';
针对您的第一个问题:在名为“TableName”的表中,有一个名为“CenterPoint”的空间点列。以下代码按位置对中心点进行分组,如果计数大于1,则表示存在重复项:
SELECT ID, COUNT(CenterPoint)
FROM TableName
GROUP BY CenterPoint
HAVING COUNT(CenterPoint) > 1
我最近使用了这些方法
SELECT DISTINCT(T1.Id)
FROM table T1, table T2
WHERE T1.Shape.STEquals(T2.Shape) > 0
AND T1.Id <> T2.Id
ORDER BY Id
这样,您可以使用空间关系来查找重复项。
另一种方法是使用典型的 SQL GROUP BY
,使用几何图形的文本。
SELECT Id, Shape.STAsText(), COUNT(*) Duplicates
FROM table
GROUP BY Id, Shape.STAsText()
HAVING COUNT(*) > 1