Effectuer 2 INNER JOIN sur la même table

Fermé
pythong Messages postés 7 Date d'inscription vendredi 1 avril 2011 Statut Membre Dernière intervention 14 février 2013 - 14 févr. 2013 à 15:24
pythong Messages postés 7 Date d'inscription vendredi 1 avril 2011 Statut Membre Dernière intervention 14 février 2013 - 14 févr. 2013 à 16:40
Bonjour,

Je souhaite effectuer deux INNER JOIN sur la même table mais à chaque fois le même message d'erreur revient :

- #1066 - Not unique table/alias: 'systeme'

Voici ma requête SQL :

- SELECT systeme.systeme, systeme.etat, maintenance.date, panne.heureDebut FROM systeme, maintenance, panne INNER JOIN systeme ON maintenance.idSysteme = systeme.idSysteme INNER JOIN systeme ON panne.idSysteme = systeme.idSysteme WHERE systeme.idCategorie=1

Mon but est de récupérer les champs systeme et etat de la table systeme, le champ date de la table maintenance et le champ heureDebut de la table panne afin de les afficher dans un tableau.

Merci d'avance pour votre aide,
pythong

A voir également:

3 réponses

Utilisateur anonyme
14 févr. 2013 à 15:42
Bonjour

Pour que SQL s'y retrouve entre toutes les occurrences de ta table 'systeme', il faut mettre des alias différents et utiliser ces alias pour qualifier les champs.
0
pythong Messages postés 7 Date d'inscription vendredi 1 avril 2011 Statut Membre Dernière intervention 14 février 2013
14 févr. 2013 à 15:44
Bonjour,

Merci pour votre réponse.

Cependant auriez-vous un exemple ?

Merci d'avance
0
Utilisateur anonyme
14 févr. 2013 à 16:07
En y regardant de plus près, je pense plutôt que tu as simplement mal écrit tes jointures et que tu n'avais pas à joindre plusieurs fois la même table.
Tu ne voulais pas plutôt faire :

 SELECT systeme.systeme, systeme.etat, maintenance.date, panne.heureDebut FROM systeme INNER JOIN maintenance ON maintenance.idSysteme = systeme.idSysteme INNER JOIN panne ON panne.idSysteme = systeme.idSysteme WHERE systeme.idCategorie=1
0
pythong Messages postés 7 Date d'inscription vendredi 1 avril 2011 Statut Membre Dernière intervention 14 février 2013
14 févr. 2013 à 16:33
Bonjour,

En effet j'avais inversé le nom des tables à joindre en mettant systeme au lieu de maintenance et panne.

Merci beaucoup pour votre aide.

J'ai une dernière question, avec cette requête pour qu'un systeme soit affiché il faut qu'il possède une maintenance ainsi qu'une panne. Un systeme ne possédant pas de panne n'est pas affiché. Aurait-il un moyen d'éviter cela ?

Merci encore pour votre aide,
pythong
0
Utilisateur anonyme
14 févr. 2013 à 16:38
...FROM systeme LEFT JOIN maintenance...

LEFT JOIN va fficher toutes les lignes de la table de gauche, même s'il n'y a pas de ligne qui correspond dans la table de droite
0
pythong Messages postés 7 Date d'inscription vendredi 1 avril 2011 Statut Membre Dernière intervention 14 février 2013
14 févr. 2013 à 16:40
Un grand merci pour votre aide tout fonctionne correctement.

Excellente fin de journée
0