首页 > 解决方案 > SSMS - 删除重复的分组值

问题描述

我在 SQL (SSMS) 中有一个表,如下所示:

Group|item
1|desk
1|phone
1|book
2|desk
2|phone
3|desk
3|phone
3|book
4|Desk
4|phone
4|laptop

我想删除该组中的所有项目都存在于另一个组中的任何组。如果有 2 个或更多组都具有完全相同的项目,那么我只想保留该组的一个实例并摆脱其他实例。

在上面的示例表中,我只保留第 1 组和第 4 组,因为第 2 组中的所有项目都已存在于第 1 组中,第 3 组只是第 3 组的副本。

有没有简单的方法来实现这一目标?我目前有一个解决方案,我将上面的表选择到一个临时表中,将该表加入到自己的 group!=group 中,获取正确表中项目的不同计数,计算项目匹配的实例数以及两者是否匹配数字相同,我删除了该组。(因为这会显示该组中的所有项目都存在于左侧的组中)

这个解决方案的问题是,通过将表内部连接到组号不匹配的自身上,我必须创建一个具有 (x^2) - x 行数的表和我的真实表处理有超过 30,000 行,我宁愿不创建包含大约 90 亿行的表。

另请注意,我有数千种不同的物品。

标签: sqlsql-server

解决方案


我会使用NOT EXISTS

select distinct t.group
from table t
where not exists (select 1 from table t1 where t1.group < t.group and t1.item = t.item);

group是 SQL Server 的保留关键字,因此group不推荐使用 with 来命名列。


推荐阅读