SQL查找并删除重复的项目

时间:2015-05-10 18:30:06

标签: sql postgresql sql-delete

我正在使用PostgresSQL。我有以下gps点表的结构:

enter image description here

正如您可以看到id = 551071551073以及551075具有相同坐标的点。我想删除它们,所有3点。但问题是我有一个600K对象的数据集,我想删除所有用户的所有重复坐标。这意味着我想从用户10中删除这三个点。如果用户11也具有相同的坐标,则无需删除。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

您可以使用在聚合子查询上应用的exists运算符:

DELETE FROM my_table a
WHERE  EXISTS  (SELECT   b.lon, b.lat, b.user_id
                FROM     my_table b
                WHERE    a.lon = b.lon AND
                         a.lat = b.lat AND
                         a.user_id = b.user_id
                GROUP BY b.lon, b.lat, b.user_id
                HAVING   COUNT(*) > 1)