sql - 如果 2 个列匹配,则删除 sql server 中的重复记录
问题描述
Col1 | Col2 | Col3 |
---|---|---|
一个 | 乙 | 1 |
一个 | 乙 | 1 |
一个 | 乙 | 2 |
一个 | 乙 | 2 |
一个 | C | 1 |
当 col1 和 Col2 值相同且 Col3 值不同时,我不希望结果集中的值。我想要的结果如下。我尝试了 row_number、group by ,但没有奏效。请在这里帮助我
Col1 | Col2 | Col3 |
---|---|---|
一个 | 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;
推荐阅读
- python - 如何从内部 if 语句中退出外部循环
- php - 执行“'cache:clear --no-warmup'”命令时出错:
- javascript - 通过在 javascript 中第一次出现逗号来分割
- javascript - react.js 组件创建时如何设置样式?
- angularjs - AngularJS:仅过滤未删除的用户
- sql-server - SQL Server - 过去 3 天的添加/累积
- mysql - MySQL替换多个字符
- go - 如何在 Golang 中使用 struct 和 map[string]interface{} 之间的反射比较数据
- c# - 如何分配全局初始化事件?
- python - 用 Pandas Series 中的元素填充 Pandas DataFrame 的对角线