MySQL 5.6 - 除去具有最高值的重复项之外的所有重复项的过程?

时间:2017-06-07 21:10:11

标签: mysql

我有下表,我想删除col_2的所有副本,并且只保留值最大的那个。

-----------------------
| col_1 | col_2 | ... |
----------------|-----|
| 2     |  2    | ... |
| 3     |  2    | ... |
| 4     |  2    | ... |
----------------------

会回来:

-----------------------
| col_1 | col_2 | ... |
----------------|-----|
| 4     |  2    | ... |
----------------------

然而,我很遗憾地设计了我的表,以便没有唯一的索引或键。

为了实现这个目的,我必须做什么程序?

1 个答案:

答案 0 :(得分:0)

你可以使用几个分组和一个元组

delete from my_table a 
inner join (
    select col_2
    from my_table
    group by col_2
    having count(*)> 1
) t on a.col_2 = t.col_2
where (a.col_2, a.col_1) not in (
    select col_2, max(col_1)
    from my_table 
    group by col_2
    having count(*) > 1
)

联接仅用于获取至少具有重复行的col_2,而不是用于删除行而不是max(col_1)