IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage SQL Discussion :

Jointures complexes


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut Jointures complexes
    Bonjour,

    voila j'ai deux tables avec deux associations qui les relient :

    table membre reliée à table associer et cette table reliée à un groupe.
    table membre reliée à table groupe_membre et cette table reliée à un groupe.

    voici ma jointure mais je n'arrive pas a faire la deuxième partie j'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT DISTINCT *
    FROM groupe_membre, associer_groupe, groupe_ovip, membre_ovip
    INNER JOIN groupe_ovip ON groupe_membre.ref_groupe = groupe_ovip.id_groupe
    INNER JOIN membre_ovip ON groupe_membre.ref_membre = membre_ovip.id_membre
    INNER JOIN groupe_ovip ON associer_groupe.ref_groupe = groupe_ovip.id_groupe
    INNER JOIN membre_ovip ON associer_groupe.ref_membre = membre_ovip.id_membre
    WHERE groupe_ovip.id_groupe = "1"

    - Not unique table/alias: 'groupe_ovip'


    merci de votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Bonjour,
    Tu dois mettre un alias sur les tables que tu utilises 2 fois dans ta requête.
    D'ailleurs je trouve que tu as une façon bizarre d'écrire ta requête: une liste de table dans le from, puis des inner join... sur les mêmes tables.

    Tatayo.

  3. #3
    Membre extrêmement actif
    Avatar de islamov2000
    Homme Profil pro
    Ingénieur d'études & developpement en informatique
    Inscrit en
    Septembre 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur d'études & developpement en informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 814
    Billets dans le blog
    6
    Par défaut
    C'est une salade au thon


    tu peux mettre ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SELECT DISTINCT *
    FROM groupe_membre A, 
    associer_groupe B, 
    groupe_ovip C, 
    membre_ovip D
    where  
    AND A.ref_groupe = C.id_groupe
    AND  A.ref_membre = D.id_membre
    AND  B.ref_groupe = C.id_groupe
    AND B.ref_membre = D.id_membre
    AND C.id_groupe = "1"

  4. #4
    Membre très actif
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2011
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2011
    Messages : 146
    Par défaut
    Bonjour,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    SELECT *
    FROM            groupe_membre   t1 
         INNER JOIN groupe_ovip     t2 ON  t1.ref_groupe = t2.id_groupe
         INNER JOIN membre_ovip     t3 ON  t1.ref_membre = t3.id_membre
         INNER JOIN associer_groupe t4 ON  t4.ref_groupe = t2.id_groupe 
                                       AND t4.ref_membre = t1.id_membre    
    WHERE t3.id_groupe = "1"
    Fais quand même un tour sur les tutos SQL

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    En évitant la guerre des étoiles et en supprimant les guillemets autour de la valeur numérique (j'ose espérer que cet identifiant est bien de type entier ?), ce sera encore mieux. Je changerais aussi l'ordre des tables pour éviter de pointer sur deux tables dans la même jointure et j'utiliserais des alias plus mnémotechniques.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT -- les colonnes nécessaires et pas étoile !
    FROM associer_groupe ag
    INNER JOIN groupe_membre gm ON ag.ref_membre = gm.id_membre
        INNER JOIN membre_ovip mo ON gm.ref_membre = mo.id_membre
    INNER JOIN groupe_ovip go ON ag.ref_groupe = go.id_groupe
    WHERE mo.id_groupe = 1
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre éprouvé
    Inscrit en
    Janvier 2008
    Messages
    1 159
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 1 159
    Par défaut
    Bonjour,

    j'ai essayé votre code mais ça ne me retourne rien, j'aurai du m'expliquer un peu mieux, voila j'ai

    table membre reliée à table associer et cette table reliée à un groupe.
    table membre reliée à table groupe_membre et cette table reliée à un groupe.

    la table associer enregistre les membres qui ont créé des groupes.

    la table groupe_membre enregistre les membres qui sont contenus dans certains des groupes créés.

    je voudrais récupérer toutes les informations des membres qui appartiennent au groupe 1 et dont le groupe a été créer par le membre 120.

    membre 0.n groupe_membre 0.n groupe (appartient au groupe)
    membre 0.n associer_membre 0.n groupe (creer le groupe)

    merci.

  7. #7
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 427
    Par défaut
    Donc un truc du genre:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    select m1.id
    from membre m1
    inner join groupe_membre as gm on gm.idmembre = m1.id
    inner join groupe as g1 on g1.id = cm.idgroupe
    inner join associer as a1 on a1.idgroupe = g1.id
    inner join membre m2 on m2.id = associer.idmembre
    where g1.numero = 1 and m2.numero = 120

    Les deux premières jointures pour le lien entre les membres et leurs groupes, et les deux dernières pour le créateur du groupe.

    Tatayo.

  8. #8
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 815
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par kate59 Voir le message
    la table associer enregistre les membres qui ont créé des groupes.

    membre 0.n associer_membre 0.n groupe (creer le groupe)
    Ça veut dire qu'un groupe peut être créé par plusieurs membres ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Requete avec jointure complexe
    Par chjerome dans le forum Requêtes
    Réponses: 4
    Dernier message: 13/05/2008, 16h53
  2. [BO 6.5] Jointure complexe et tables dérivées
    Par tegestobis dans le forum Designer
    Réponses: 9
    Dernier message: 09/01/2008, 14h21
  3. Requête : Jointure Complexe
    Par xwawa dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/03/2006, 10h10
  4. [MySQL 4.0.15] Jointure complexe
    Par Carter dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/02/2006, 14h31
  5. Auto jointure complexe
    Par ricobye dans le forum Langage SQL
    Réponses: 11
    Dernier message: 19/01/2006, 16h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo