tongyuelong
V2EX  ›  PostgreSQL

请问一下 postgresql 如何删除重复数据项?

By tongyuelong at 2021 年 6 月 29 日 · 2881 次点击

大家好,我现在手上有一张大表,600 万的数据吧。但是里面一半是重复的。

column 是这样的

id,column1 ,column2

但是每一项的数据都是重复的,比如

select * from testtable ; 

==>
  
  id ,column1,column2 
  1, name1, 数据 1
  1, name1, 数据 22222

因为原先的 id 没有设置唯一约束,导致出现的这么多重复项, id ,column1 内容都是一样的,但是 column2 就不一样了。

怎么样可以保留 column2 字数比较多的那一项,另一项删除掉?

不知道我有没有表述清楚,请大家见谅。

3 条回复  •  2021-06-29 19:39:06 +08:00
hqs0417
   1
hqs0417  
   2021 年 6 月 29 日   ❤️ 1
select *, ROW_NUMBER() over (PARTITION by id order by len(column2) desc) as row_n
from testtable


结果是
id ,column1,column2 , row
1, name1, 数据 2222, 0
1, name1, 数据 1, 1

row 是 0 的就是要保留的数据
Tsukihime
   2
Tsukihime  
   2021 年 6 月 29 日   ❤️ 1
delete t2
from testtable t1
join testtable t2 on t2.id = t1.id
where CHAR_LENGTH(t2.column2) < CHAR_LENGTH(t1.column2);
tongyuelong
   3
tongyuelong  
OP
   2021 年 6 月 29 日
感谢 两位 . @zydxn @hqs0417
© 2026 V2EX · 47ms · 3.9.8.5