我有下表,我想删除col_2的所有副本,并且只保留值最大的那个。
-----------------------
| col_1 | col_2 | ... |
----------------|-----|
| 2 | 2 | ... |
| 3 | 2 | ... |
| 4 | 2 | ... |
----------------------
会回来:
-----------------------
| col_1 | col_2 | ... |
----------------|-----|
| 4 | 2 | ... |
----------------------
然而,我很遗憾地设计了我的表,以便没有唯一的索引或键。
为了实现这个目的,我必须做什么程序?
答案 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)