首页 > 解决方案 > 无主键表批量删除的SQL查询

问题描述

我有一个没有主键但应该有的 SQL 表,它是 account_id、键和索引。

但不幸的是,在我注意到这个问题之前,我已经有数百万条目了。

我有从 2000001 到大约 2004000+ 的 account_id,还有几个应该是主键的键,所以如果有更新,只有值会被替换。

下面的示例图片, https://i.imgur.com/g6je2zL.png

account_id 2000846 下应该只有 1 个#betaminutes 和#online_minute,并且值应该是最高的

是否可以对我拥有的所有不同键的每个 account_id 进行批量删除,并且只保存每个 account_id 键的最高值的条目?

谢谢

标签: sqlphpmyadmin

解决方案


您正在使用大删除将是昂贵的。在 MySQL 中,您可以使用:

delete t
    from t join
         (select account_id, key, max(value) as max_value
          from t
          group by account_id, key
          having count(*) > 1
         ) tt
         using (account_id, key)
     where value < max_value;

注意:如果有最高值的平局,那么这将保持平局,但您的样本数据表明没有平局。


推荐阅读