SQL正在从同一表中删除子集

  • 本文关键字:删除 子集 SQL sql subset
  • 更新时间 :
  • 英文 :


我试过在类似的问题上查找这个,但它们似乎不等价。

我试图从表中删除较小的子集组,无论组中值的顺序如何。因此,保留较大的组,删除较小的组,只要它们是较大组的子集。

Group   Item
1       A
1       B
1       C
1       D
2        B
2        A
3       B
3       E
3       A
4        Z
4        W
4        Y

在这个例子中,由于第1组是最大的,我想保留它。我也想保留第4组,因为它不是另一组的子集。但我想删除组2(因为它是组1的子集(,但不删除组3(因为它不是完整的子集(。

我还将提到的是,数据是巨大的;项目";或";组";值将为,所以我不能使用特定值进行查询。

您可以将父组和子组的对获取为:

select t1.group as parent_group, t2.group as childgroup
from t t2 left join
t t1
on t1.item = t2.item and t1.group <> t2.group
group by t1.group, t2.group
having count(t1.item) = (select count(*) from t tt1 where tt1.group = t1.group);

这将检查子对象(t2(中的所有内容是否都在父对象(t1(中。

如果您知道没有相同的组,则可以删除所有子组。如果它们可以相同,则将having更改为:

having count(t1.item) = (select count(*) from t tt1 where tt1.group = t1.group) and
count(*) <> count(t1.item)   -- not an exact match

最新更新