我有一个包含两列ID的表格,如下所示:
╔════════╦══════╗
║ Master ║ Dupe ║
╠════════╬══════╣
║ 2 ║ 7 ║
║ 3 ║ 6 ║
║ 6 ║ 7 ║
║ 20 ║ 25 ║
║ 75 ║ 25 ║
╚════════╩══════╝
每行代表一个SQL表中被认为是彼此重复的两行记录的ID。
这个表可以包含许多千条目,除了
Master
列按升序排列之外,没有数据保证。任何一列都可能包含与另一列相同的ID,可能是不同的或相同的伙伴ID。再次强调-没有保证。我希望从这张表中得到主ID及其所有可能的副本索引,如下所示。
期望的结果:
1.应保留最低ID作为主ID
2.所有后续的重复项都应映射回同一个(最低ID)主ID
对于上述要求,所需输出如下所示(但列不必排序):
╔════════╦══════╗
║ Master ║ Dupe ║
╠════════╬══════╣
║ 2 ║ 3 ║
║ 2 ║ 6 ║
║ 2 ║ 7 ║
║ 20 ║ 25 ║
║ 20 ║ 75 ║
╚════════╩══════╝
我发现这个问题很难解释,所以我的谷歌搜索没有得到太多的结果。我想必须有一个算法可以迭代遍历这样的元组列表并发现重复。
感谢任何帮助!
编辑:我修改了示例表以更好地解释它们可能的内容。
一些注意事项:
- 没有连锁的保证。它可能是一个大链,许多小链或根本没有链。
- 不能保证所有对在表中的反向顺序出现在其他地方
从我所看到的,这个问题似乎是递归的,我认为LukStorms走在正确的轨道上,但我还不能完全弄清楚
回答:虽然@artm和@LukStorms的两个解决方案都似乎可以工作,但我发现后者更加简洁易读。非常感谢您们在一个难题上提供的帮助。我只希望能把答案授予你们两个。