微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果 2 列匹配

如何解决如果 2 列匹配

Col1 Col2 Col3
A B 1
A B 1
A B 2
A B 2
A c 1

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

Col1 Col2 Col3
A c 1

解决方法

您可以使用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;
,

最好的方法是让这些列成为唯一的组合键。但这里有一个查询,用于删除除您想要的结果之外的所有记录。

delete from Table_1 
where 
Col1=(SELECT Col1
      FROM table_1
      GROUP BY Col1,Col2
      HAVING Count(*) > 1) 
And 
Col2 =(SELECT Col2
       FROM table_1
       GROUP BY Col1,Col2
       HAVING Count(*) > 1)

这可能不是最优化和最高效的查询,但它有效。如果您不想删除重复的记录而只想检索唯一的记录:

SELECT Col1,Col2
FROM table_1
GROUP BY Col1,Col2
HAVING Count(*) = 1

获取重复记录:

SELECT Col2,Col1
FROM table_1
GROUP BY Col1,Col2
HAVING Count(*) > 1

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。