首页 > 解决方案 > 如何删除 SQL 数据库中存在 account_id 重复项的行?

问题描述

我有一个数据库,其中每一行都由“account_id”和“device_name”的组合唯一标识(这两个组合在一起使行唯一)。最多应有两个具有特定“account_id”的帐户,例如:

account_id: 78, device_name: "Bob",
account_id: 78, device_name: "John"

但是我最近引入了一个可能超过 2 个的错误,我想保留所有出现的情况,例如上面只有 1 个或 2 个的出现,但删除所有有 3 个或更多的出现(该错误现在已得到纠正,并且下次用户登录时它会自动修复它,所以不用担心)。

例如,这很糟糕,我想删除所有 3 行:

account_id: 39, device_name: "Tim",
account_id: 39, device_name: "Rob",
account_id: 39, device_name: "Sam"

我知道我可以做类似的事情:SELECT COUNT(*) FROM accounts where account_id=89;它会像count: 6. 此时我会知道这是一个错误,我应该删除与该 ID 匹配的行。

我可以为每个帐户手动检查并执行此操作,但有几十个帐户会变得非常重复。有没有办法用另一个命令“链接”它,并按照“查找数据库中相同 account_id 在 3 行或更多行中的所有行,并删除这些行”的方式说些什么?

标签: sqlduplicatessql-delete

解决方案


您可以在 a 中使用过滤delete

delete from t
    where account_id in (select account_id from t group by account_id having count(*) > 2);

推荐阅读