SQL Server:删除Sales表中所有含重复Sales Portfolio值的行
删除Sales表中所有含重复Sales Portfolio值的行
嘿,这个需求很清晰——要把所有带有重复Sales Portfolio值的记录全部删除,包括重复行本身对吧?下面给你两种实用的SQL实现方案,适配不同的数据库环境:
方法一:子查询匹配重复值(通用多数数据库)
先通过子查询找出所有重复出现的Sales Portfolio值,再删除表中包含这些值的所有行:
DELETE FROM Sales WHERE `Sales Portfolio` IN ( SELECT `Sales Portfolio` FROM Sales GROUP BY `Sales Portfolio` HAVING COUNT(*) > 1 );
方法二:自连接方式(适配MySQL等不支持同表子查询删除的数据库)
有些数据库(比如MySQL)直接在DELETE里引用同表子查询会触发报错,这时候可以用自连接的方式来绕开限制:
DELETE s1 FROM Sales s1 INNER JOIN ( SELECT `Sales Portfolio` FROM Sales GROUP BY `Sales Portfolio` HAVING COUNT(*) > 1 ) s2 ON s1.`Sales Portfolio` = s2.`Sales Portfolio`;
逻辑说明
- 核心的子查询
SELECT Sales Portfolio FROM Sales GROUP BY Sales Portfolio HAVING COUNT(*) > 1负责筛选出所有出现次数超过1次的Sales Portfolio值,也就是我们要清理的重复值集合。 - 外层的DELETE操作会把表中所有
Sales Portfolio值属于这个重复集合的记录全部删除,完美符合你要的“删除所有包含该值的行(包括重复行本身)”的需求。
拿你给出的示例数据来说,执行后Kavi的三条12500的记录会被全部删除,剩下的Raj的三条记录(对应21055、32015、12000,都是唯一值)会保留下来。
内容的提问来源于stack exchange,提问作者Hemal
相关产品推荐
相关产品推荐

