代码之家  ›  专栏  ›  技术社区  ›  Gareth Davidson

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

  •  4
  • Gareth Davidson  · 技术社区  · 14 年前

    我正在考虑一个应用程序的设计,其中的主要功能围绕着找到所有集合的集合的能力,这些集合是给定集合的子集。

    例如,给定输入集A={1,2,3…50}和集B={B1={3,5,9,12},B2={1,6100123,45}。。。B500={8,67450},返回a的子集的所有Bs。

    我想这和搜索引擎很相似,只是我没有把a设得很小,而Bs却很大的奢侈;在我的例子中,Bs通常比a小。

    我发现了一个类似的问题 here ,但想知道是否有更高效/更标准的方法。

    1 回复  |  直到 7 年前
        1
  •  3
  •   PerformanceDBA    14 年前

    哈珀的回答是正确和优雅的。当然是有经验的SQL代码编写者中的“标准”。当然,要求db必须规范化:Parent不重复;Parent::Child有两个关系;在子表中有两个唯一索引(ParentKey,ChildKey)和(ChildKey,ParentKey),“否则所有下注都将关闭”。不可能获得比这更好的性能(假设服务器已为硬件等正确配置)。下一步是6NF,它确实显著提高了性能,但是除非必须,否则您不需要去那里。如果你的Bs比As小,它会很快。

    另一种方法是使用子查询。根据您的数据库供应商,子查询(特别是如果您的Bs小于As)可以更快。Sybase处理子查询远比MS好。