【问题标题】:How to delete duplicates based on condition on 2 columns using SQL如何使用 SQL 根据 2 列上的条件删除重复项
【发布时间】:2020-02-01 00:59:20
【问题描述】:

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

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

如何使用 SQL 查询来做到这一点?

【问题讨论】:

    标签: sql postgresql duplicates sql-delete


    【解决方案1】:

    我认为这是你想要的:

    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,可以类似地完成:

        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
                         );
    

    【讨论】:

    • 谢谢!这可行,但我可以在这里问你一个相关的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-16
    • 1970-01-01
    相关资源
    最近更新 更多