首页 > 解决方案 > 如何在 SQL 中删除表中的相等行?

问题描述

我有一个表,其中插入了一些数据。问题是有很多行与其他行相同,我想删除它们,只留下其中的一行。例如:

表人

    name       pet
---------------------------
    Mike       Dog
    Kevin      Dog
    Claudia    Cat
    Mike       Dog
    Mike       Dog
    Kevin      Snake

如您所见,我们可以多次看到PersonnamedMike有一个Dog. 但我只想看一次。所以更新这个表后我想要的输出是:

    name       pet
---------------------------
    Mike       Dog
    Kevin      Dog
    Claudia    Cat
    Kevin      Snake

如何才能做到这一点?

标签: sqlpostgresqlduplicatessql-delete

解决方案


您可以使用exists. 在明显没有主键的情况下,可以使用系统列:ctid

delete from mytable t
where exists (
    select 1
    from mytable t1
    where t1.name = t.name and t1.pet = t.pet and t1.ctid > t.ctid
);

推荐阅读