我
asked this question a while back删除基于列的重复记录.答案很棒:
delete from tbl where id NOT in ( select min(id) from tbl group by sourceid )
我现在有一个模拟的情况,但重复记录的定义是基于多个列.如何更改此上述SQL以识别重复记录,其中唯一记录定义为从Col1 Col2 Col3连接.我会做这样的事情吗?
delete from tbl where id NOT in ( select min(id) from tbl group by col1,col2,col3 )
解决方法
这显示您要保留的行:
;WITH x AS ( SELECT col1,col3,rn = ROW_NUMBER() OVER (PARTITION BY col1,col3 ORDER BY id) FROM dbo.tbl ) SELECT col1,col3 FROM x WHERE rn = 1;
这显示您要删除的行:
;WITH x AS ( SELECT col1,col3 FROM x WHERE rn > 1;
一旦你高兴,上述两套是正确的,以下将实际删除它们:
;WITH x AS ( SELECT col1,col3 ORDER BY id) FROM dbo.tbl ) DELETE x WHERE rn > 1;
请注意,在所有三个查询中,前6行都相同,只有CTE之后的后续查询已更改.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。