我遇到了一个棘手的问题。我需要根据几何图形选择SQL空间表中的所有重复项(有些已经复制并粘贴,但没有意识到它们一遍又一遍地粘贴相同的几何体)。
我需要选择除几何图形相同的最低ID之外的所有重复项。
答案 0 :(得分:2)
您可以自己加入表格并查看STEquals功能。
SELECT tbl1.OBJECTID, tbl2.OBJECTID
FROM your_table tbl1
JOIN yout_table tbl2 ON tbl1.your_geometry_field.STEquals(tbl2.your_geometry_field) = 1
ORDER BY tbl1.OBJECTID
一个缺点是你得到重复的对,如下所示:
101 110
101 210
110 101
110 210
210 101
210 110
答案 1 :(得分:0)
对于您的问题的第一部分:在名为“TableName”的表上,其中一个空间点列名为“CenterPoint” 以下按位置对中心点进行分组,如果计数大于1,则存在重复:
@@
答案 2 :(得分:0)
我最近使用了这些方法
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
答案 3 :(得分:0)
请尝试以下代码段
SELECT tbl1.id, tbl2.id
FROM HEXA_GRID_SP tbl1,
HEXA_GRID_SP tbl2
where SDO_EQUAL(tbl1.geometry,tbl2.geometry) = 'TRUE';
答案 4 :(得分:-1)
这将为您提供所有重复项。
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