我有一个产品编号表,左边的产品是右边产品的等价物。假设类似于传递属性,如果产品A与B匹配,并且B与C匹配,那么A也是C的匹配。这尽可能地扩展,如果C也匹配D,那么B和A也是D的匹配。
我试图找到一种方法,我可以通过两个列表,并使用一个标志,指出哪些产品组合在一起。
我尝试了一些自连接和交叉连接的组合,但是在太多行的产品(大约50,000)中,每个组中的匹配太多(可能是数百个)。我认为递归CTE可能是一种解决方案,但我对它们如何正常工作仍然有点模糊。
基本上,我的数据如下所示:
Product1 | Product2
123 | 124
124 | 126
125 | 123
126 | 125
127 | 129
128 | 127
129 | 130
130 | 128
在这种情况下,
123 = 124 = 125 = 126
和
127 = 128 = 129 = 130
因此,最终输出应如下所示:
Product | Group
123 | 1
124 | 1
125 | 1
126 | 1
127 | 2
128 | 2
129 | 2
130 | 2
我意识到SQL可能不是解决此问题的最佳应用程序,但这是整个业务流程的一部分,所有这些都在SQL中运行,所以我没有选择使用Python或者是更灵活,适合这种任务。任何帮助都将非常感激。
答案 0 :(得分:-1)
你最好构建一个无向图和DFS它,找到所有周期,每个周期都是一个组,结果就是这些组。