小编典典

查找SQL中超集的子集的所有集

sql

我正在考虑一个应用程序的设计,该应用程序的主要功能围绕着找到所有给定集合的子集的集合的能力而展开。

例如,给定输入集A = {1,2,3 … 50}和集合集B = {B1 = {3,5,9,12},B2 = {1,6,100,123,45}。 ..
B500 = {8,67,450}},返回所有属于A子集的B。

我想它与搜索引擎类似,除了我并没有设置A小而B大的奢侈。在我的情况下,B通常小于A。

我在这里找到了类似的问题,但想知道是否还有任何更有效/标准的方法。


阅读 169

收藏
2021-03-23

共1个答案

小编典典

哈珀的答案是正确而优雅的。当然,这是经验丰富的SQL编码人员中的“标准”。要求当然是必须对数据库进行规范化:父级不重复;父母::孩子有两个关系;在子表中有两个唯一的索引(ParentKey,ChildKey)和(ChildKey,ParentKey),“否则所有投注均关闭”。不可能获得比这更好的性能(假设服务器已针对硬件进行了正确配置,等等)。下一步是6NF,它确实可以显着提高性能,但是除非必须如此,否则您无需走到那里。如果您的B小于您的A,则速度会非常快。

替代方法是使用子查询。根据Db供应商的不同,子查询(尤其是B小于As的情况)会更快。例如。Sybase处理子查询要比MS好得多。

2021-03-23