Вот суть проблемы: приведен список наборов, например:
[ (1,2,3), (5,2,6), (7,8,9), (6,12,13), (21,8,34), (19,20) ]
Возвращает список групп наборов, таких, что наборы с общим элементом находятся в одной группе.
[ [ (1,2,3), (5,2,6), (6,12,13) ], [ (7,8,9), (21,8,34) ], [ (19,20) ] ]
Обратите внимание на залипание - множество (6,12,13) не имеет общего элемента с (1,2,3), но они попадают в одну группу из-за (5,2,6).
Чтобы усложнить ситуацию, я должен отметить, что у меня нет этих аккуратных наборов, а есть таблица БД с несколькими миллионами строк, которая выглядит следующим образом:
element | set_id
----------------
1 | 1
2 | 1
3 | 1
5 | 2
2 | 2
6 | 2
и т. Д. Поэтому мне бы хотелось, чтобы это делалось в SQL, но я был бы рад общему руководству для решения.
EDIT : Изменены имена столбцов таблицы на (element, set_id) вместо (key, group_id), чтобы сделать термины более согласованными. Обратите внимание, что в ответе Кева используются старые имена столбцов.