sql - 如何删除 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 行或更多行中的所有行,并删除这些行”的方式说些什么?
解决方案
您可以在 a 中使用过滤delete
:
delete from t
where account_id in (select account_id from t group by account_id having count(*) > 2);
推荐阅读
- delphi - Delphi Version number central but other info decentral
- c# - 我在哪里可以找到使用 c# 导出 microsoft LUIS 应用程序的内容并将其导入到另一个应用程序的代码示例?
- swift - 用户从数组中选择项目后更新进度条
- python - Tkinter:如何在 2 个按钮之间均匀分配空间
- python - 使用 Python 通过 Json 文件中的键插入特定值
- c++ - 在 c/c++ 中打开 PhysicalDrive 的句柄并写入 MBR 的 linux 等效项是什么?
- symfony - 角色更新后更新用户令牌?
- android - LibVlc 禁用字幕轨道
- bash - 想用增量变量值替换匹配的单词
- visual-studio - 为内置命令实现新图标