如何使用SQL根据2列上的条件删除重复项

如何使用SQL根据2列上的条件删除重复项,sql,postgresql,duplicates,sql-delete,Sql,Postgresql,Duplicates,Sql Delete,我有下表。我想删除重复的行并保留Name1=Name2的行。因此,在下面的示例中,应删除第2行和第4行 ID | Name1 | Name2 1 | n1 | n1 1 | n1 | n2 2 | n1 | n1 2 | n1 | n2 如何使用SQL查询实现这一点?我认为这符合您的要求: delete from t where t.name1 <> t.name2 and exists (select 1

我有下表。我想删除重复的行并保留Name1=Name2的行。因此,在下面的示例中,应删除第2行和第4行

ID | Name1 | Name2
 1 | n1    |  n1
 1 | n1    |  n2
 2 | n1    |  n1
 2 | n1    |  n2

如何使用SQL查询实现这一点?

我认为这符合您的要求:

delete from t
    where t.name1 <> t.name2 and
          exists (select 1
                  from t t2 
                  where t2.id = t.id and
                        t2.name1 = t2.name2
                 );

谢谢这是可行的,但我能问你一个相关的问题吗?
    select t.*
    from t
    where t.name1 = t.name2 or
          not exists (select 1
                      from t t2 
                      where t2.id = t.id and
                            t2.name1 = t2.name2
                     );