首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >postgres表只有一两列有重复数据,如何删除重复数据?

postgres表只有一两列有重复数据,如何删除重复数据?
EN

Stack Overflow用户
提问于 2019-03-26 00:11:51
回答 2查看 36关注 0票数 0

我有一个表,在一列或两列中有重复数据。我想删除重复的数据,只保留一条记录。

我尝试了以下代码,但它删除了我的表中的所有数据。

代码语言:javascript
复制
DELETE from test del 
WHERE EXISTS (
        SELECT *
        FROM test ex
        WHERE ex.name= del.name      
        );
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-26 01:29:46

如果没有主键,区分重复行的诀窍是使用ctid,它是标识行的(非持久性)物理位置的伪列。两行不能具有相同的ctid,并且ctid可以相互比较。

下面的查询添加条件,针对每个重复项区分要删除的行和要保留的行。

代码语言:javascript
复制
DELETE from test del 
WHERE EXISTS (
        SELECT *
        FROM test ex
        WHERE ex.name= del.name
          AND ex.ctid > del.ctid
        );
票数 0
EN

Stack Overflow用户

发布于 2019-03-26 00:41:56

如果你的数据有一个主键,那么你可以这样做:

代码语言:javascript
复制
delete from test t
    where t.pk in (select min(t2.pk) from test t2 group by t2.name);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55342062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档