在mysql交互表中找到所有子集

时间:2018-07-02 13:09:06

标签: mysql subset

我正在寻找最高性能的方法,以从关系数据库交互表中获取子集列表。

例如该表可跟踪每个组中的哪些项目:

GroupID ItemId
1       1
1       2
1       3
2       1
2       2
3       2

我希望结果是:

Superset Subset
1        2
1        3
2        3

也就是说,第2组是G1和G2的第1组,G3的子集,但是1,2,3的其他组合都不是彼此的子集。

很容易想到下面的循环内循环解决方案。但是,在我的实际表中,有成千上万个群组,因此即使我在下面的代码中省略了一些次要的快捷方式,也不可行。

foreach(Group) {
  foreach(Group) {
    --Make sure Group#1 > Group#2

    SELECT @num:=COUNT(*) 
      FROM the_table_above
      WHERE GroupID = Group#1
      AND ItemID NOT IN (
        SELECT ItemID FROM the_table_above WHERE GroupID = Group#2
      )
    if(@num == 0) we have a subset!

  }
}

这可以快一个数量级吗?

  1. 有没有办法使用聪明的SQL而不是循环来做到这一点?
  2. 在循环内是否有更快的查询方法? (IN功能很慢...)

0 个答案:

没有答案