Voici le jist du problème: Étant donné une liste de jeux, tels que:partition une liste d'ensembles par des éléments partagés
[ (1,2,3), (5,2,6), (7,8,9), (6,12,13), (21,8,34), (19,20) ]
Retour liste des groupes des ensembles, tels que les ensembles qui ont une responsabilité partagée élément sont dans le même groupe.
[ [ (1,2,3), (5,2,6), (6,12,13) ], [ (7,8,9), (21,8,34) ], [ (19,20) ] ]
Notez le stickeyness - l'ensemble (6,12,13) ne dispose pas d'un élément partagé avec (1,2,3), mais ils se mettre dans le même groupe en raison de (5,2 , 6).
Pour compliquer les choses, je dois mentionner que je n'ai pas vraiment ces jeux propres, mais plutôt une table DB avec plusieurs millions de lignes qui ressemble à:
element | set_id
----------------
1 | 1
2 | 1
3 | 1
5 | 2
2 | 2
6 | 2
et ainsi de suite. Donc, j'aimerais un moyen de le faire en SQL, mais je serais heureux avec une orientation générale pour la solution.
EDIT: Changé les noms de colonnes de table à (élément, set_id) au lieu de (clé, group_id), pour rendre les termes plus cohérente. Notez que la réponse de Kev utilise les anciens noms de colonnes.
Bravo pour l'effort! Pouvez-vous jeter un coup d'oeil à ma réponse et me dire si c'est faux, fondamentalement la même chose que votre solution, ou juste une solution différente? – itsadok
Il me semble que vous auriez besoin d'une étape de fusion pour que votre solution soit complète: vous pouvez démarrer différents goup_ids pour les ensembles qui devraient être dans le même groupe, parce que vous ne l'avez pas encore découvert. Si vous avez un doublon et que les deux ensembles sont dans des groupes différents, fusionnez les deux groupes. – Camille