【问题标题】:SQL delete duplicate id combinationsSQL删除重复的id组合
【发布时间】:2021-06-16 10:14:59
【问题描述】:

例如这张表:

+-----------+--------+--------+
|   data    | entry1 | entry2 |
+-----------+--------+--------+
| id        |      1 |      2 |
| user_id   |      1 |      1 |
| killer_id |      2 |      2 |
| server_id |      6 |      6 |
| score     |    100 |     50 |
+-----------+--------+--------+

我现在有很多条目,其中user_idkiller_idserver_id 是相等的,它们的组合应该是唯一的。 我想删除所有重复的条目,只保留分数最低的条目。

如果我现在尝试使它们独一无二,我会得到一个错误

ALTER TABLE kill_server_table ADD UNIQUE unique_index(user_id, killer_id, server_id)

Integrity constraint violation: 1062 Duplicate entry '277-1834-24' for key 'unique_index'

如何实现这一点,或者有更好的方法让它们与众不同?

【问题讨论】:

  • 谢谢,我已经编辑了帖子
  • “它们的组合应该是唯一的” - 为什么你没有一个 UNIQUE 约束来防止这种情况首先发生?还是使用复合 PK?
  • 您的示例表与ALTER 语句不匹配。没有列 user_idkiller_idserver_id...

标签: mysql sql database unique


【解决方案1】:

您需要先删除记录:

delete t
     from thistable t join
          (select user_id, killer_id, server_id, min(score) as min_score
           from thistable t
           group by user_id, killer_id and server_id
          ) tt
          using (user_id, killer_id, server_id)
    where score > min_score;

然后你可以添加一个唯一的约束或索引。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 2019-07-07
    • 2014-01-24
    相关资源
    最近更新 更多