2010-05-07 3 views
1

ma question est proche d'un problème parent-enfant, et peut avoir besoin d'une requête récursive, mais je n'ai pas trouvé de réponses en naviguant sur les forums. voici mon problème: j'ai 3 tables:trouver des relations dans une structure many-to-many avec sql

 
T1 (people)  T2 (places) T3 (relationship betwenn A and B) 
-------   ------  -------- 
id1 (pk)  id2 (pk) id3 (pk) 
name   city  id_A 
          id_B 

Je voudrais identifier les groupes de lieux et de personnes qui sont liées. Par exemple, si
John visite à Londres et Paris,
Marie rend visite à Paris et à New York,
Peter visite Bangalore et Tokyo,
Je voudrais affecter le même code de groupe à Marie, John, Paris, Londres et New York, et un autre code de groupe à Peter, Tokyo et Bangalore. Je ne sais vraiment pas comment faire cela avec SQL. Une idée?

Merci

+0

Quels SGBDR utilisez-vous? – Quassnoi

Répondre

1

Ce problème est "isolé trouvent des sous-graphes".

C'est un problème assez simple, bien qu'il ne puisse pas être résolu efficacement avec une seule requête SQL.

Il est assez facile d'écrire une procédure stockée simple:

  1. Créer une table de mise en scène:

    group_id city_id 
    
  2. Pour chaque ville, trouver group_id « s de tous ses voisins (toutes les autres villes les visiteurs de la ville ont également visité)

  3. Si les voisins appartiennent à différents group_id, mettre à jour la mise en scène tableau, définissant tous les group_id au moins un de l'ensemble.

  4. Insérez la ville avec le nouveau group_id dans la table de transfert.

+0

Bonjour, Merci pour votre réponse rapide, même si ce n'est pas si facile pour moi d'écrire la procédure. Je comprends parfaitement votre méthode, mais j'ai du mal à écrire les choses. Je serai très heureux si vous avez plus de conseils sur les fonctions spécifiques à utiliser dans la procédure. Merci encore – thoomasbro

Questions connexes