我正在解决MySQL关于子集的问题。 我被给(一个表(?))一些需要检查它们是否是特定集的子集的集合。
SELECT子集FROM表WHERE子集IN(SpecificSet);
一个小例子可能是:
SpecificSet:
1,2,3,4,5
Subsets:
1,2,3
4,5
4,5,6
1,2,5
1,5,6
Result:
1,2,3
4,5
1,2,5
实现表结构和运行查询的智能方法是什么?
答案 0 :(得分:0)
是否可以将您的设置存储为INT?
如果是这样,你可以使用二进制和(&)来获得交集。每个设置位将表示多于2 ^(n-1)=位(n)
的数字示例:
具体集:1,2,3,4,5 = 2 ^ 0 + 2 ^ 1 + 2 ^ 2 + 2 ^ 3 + 2 ^ 4 = 00 ... 11111 = 31
子集:
1,2,3 = 7
4,5 = 24
4,5,6 = 63
交叉口将是:31& 7 = 7
31& 24 = 24
31& 63 = 24