如何删除SQL数据库中存在重复帐户id的行?

如何删除SQL数据库中存在重复帐户id的行?,sql,duplicates,sql-delete,Sql,Duplicates,Sql Delete,我有一个数据库,其中每一行都由帐户id和设备名称的组合唯一标识。这两个组合在一起使行唯一。最多应有两个具有特定帐户id的帐户,例如: account_id: 78, device_name: "Bob", account_id: 78, device_name: "John" 但我最近引入了一个bug,其中可能有2个以上的bug,我想保留所有出现的bug,就像上面只有1个或2个的bug一样,但是删除所有出现3个或更多bug的bug,现在bug已经被纠正,用户下次登录时会自动修复,所以不必担心

我有一个数据库,其中每一行都由帐户id和设备名称的组合唯一标识。这两个组合在一起使行唯一。最多应有两个具有特定帐户id的帐户,例如:

account_id: 78, device_name: "Bob",
account_id: 78, device_name: "John"
但我最近引入了一个bug,其中可能有2个以上的bug,我想保留所有出现的bug,就像上面只有1个或2个的bug一样,但是删除所有出现3个或更多bug的bug,现在bug已经被纠正,用户下次登录时会自动修复,所以不必担心

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

account_id: 39, device_name: "Tim",
account_id: 39, device_name: "Rob",
account_id: 39, device_name: "Sam"
我知道我可以这样做:从account_id=89的accounts中选择COUNT*;它会像计数6一样返回。此时,我将知道这是一个bug,我应该删除与该ID匹配的行


我可以检查并手动为每个帐户执行此操作,但超过几十个帐户会变得非常重复。是否有一种方法可以将其与另一个命令链接起来,并沿着“查找数据库中同一帐户id位于3行或更多行中的所有行”这一行说些什么,然后删除这些行?

您可以在删除中使用筛选:


您可以在删除中使用筛选:


用你正在使用的数据库标记你的问题。用你正在使用的数据库标记你的问题。
delete from t
    where account_id in (select account_id from t group by account_id having count(*) > 2);