SQL查找并删除重复项

标签 sql postgresql sql-delete

我正在使用 PostgresSQL。我的 GPS 点表结构如下:

enter image description here

如您所见,id = 551071551073551075 的点具有相同的坐标。我想把它们全部删除,那3分。但问题是我有一个包含 600K 个对象的数据集,我想删除所有用户的所有此类重复坐标。这意味着我想从用户 10 中删除这三个点。如果用户11也有相同的坐标,则无需删除。我怎样才能做到这一点?

最佳答案

您可以使用应用于聚合子查询的 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)

关于SQL查找并删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30155126/

相关文章:

mysql外键仅引用复合主键的一部分

sql - 在 Access 2007 中删除多个表中的记录

sql - 是否可以动态检查该列是否存在于另一个数据库的表中

mysql - 在可在不同数据库服务器上运行的查询中使用保留字

python - Django 1.11 - 如何确保 TruncYear 生成 Zulu 时间

mysql - 如何在 MySQL/PostgreSQL 中循环几何列数据?

php - Delete from inner join mysql查询-两表多条件

mysql - 如何创建 MYSQL 模式来表示图形数据库?

mysql - SQL查询不正确

sql - 使用TABLOCKX的SQLserver多线程锁定