首页 > 解决方案 > 如果 2 个列匹配,则删除 sql server 中的重复记录

问题描述

Col1 Col2 Col3
一个 1
一个 1
一个 2
一个 2
一个 C 1

当 col1 和 Col2 值相同且 Col3 值不同时,我不希望结果集中的值。我想要的结果如下。我尝试了 row_number、group by ,但没有奏效。请在这里帮助我

Col1 Col2 Col3
一个 C 1

标签: sqlsql-serversql-server-2012

解决方案


您可以使用exists

delete from t
    where exists (select 1
                  from t t2
                  where t2.col1 = t.col1 and t2.col2 = t.col1 and
                        t2.col3 <> t.col3
                 );

您还可以使用窗口函数:

with todelete as (
      select t.*,
             min(col3) over (partition by col1, col2) as min_col3,
             max(col3) over (partition by col1, col2) as min_col4
      from t
     )
delete from todelete
     where min_col3 <> max_col3;

推荐阅读