如何解决如果 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 举报,一经查实,本站将立刻删除。