Vous n'êtes pas identifié(e).
Pages : 1
Bonjour
J'ai une situation assez étrange pour moi.
La base de données concerne une école (filière, spécialité, cycle, niveau, classe, étudiant, inscription->association entre étudiant et classe). Je voulais avoir la liste d'une classe et je suis un peut surpris du résultat.
Scénario...
I/ avec WHERE
SQL
SELECT
tetudiant.leprenom,
tetudiant.lenom
FROM
public.tinscription,
public.tetudiant,
public.tclasse,
public.tniveau,
public.tcycle,
public.tannee,
public.tspecialite,
public.tfiliere
WHERE
tetudiant.idetudiant = tinscription.idetudiant AND
tclasse.idclasse = tinscription.idclasse AND
tniveau.idniveau = tclasse.idniveau AND
tcycle.idcycle = tniveau.idcycle AND
tannee.idannee = tclasse.idannee AND
tspecialite.idspecialite = tniveau.idspecialite AND
tfiliere.idfiliere = tspecialite.idfiliere;
sortie...
"Aoua";"Coulibaly"
"Kadiatou";"Coulibaly"
"Bintou";"Dembélé"
"Fatoumata";"Bagayoko"
"Fanta";"Bouaré"
"Amadou";"Bah"
II/ avec jointure 1ère forme....
SQL....
SELECT
tetudiant.leprenom,
tetudiant.lenom
from public.tannee inner join
public.tclasse on tannee.idannee = tclasse.idannee
inner join public.tniveau on tniveau.idniveau = tclasse.idniveau
inner join public.tinscription on tclasse.idclasse = tinscription.idclasse
inner join public.tcycle on tcycle.idcycle = tniveau.idcycle
inner join public.tspecialite on tspecialite.idspecialite = tniveau.idspecialite
inner join public.tfiliere on tfiliere.idfiliere = tspecialite.idfiliere
inner join public.tetudiant on tetudiant.idetudiant = tinscription.idetudiant
sortie...
"Aoua";"Coulibaly"
"Kadiatou";"Coulibaly"
"Bintou";"Dembélé"
"Fatoumata";"Bagayoko"
"Fanta";"Bouaré"
"Amadou";"Bah"
II/ avec jointure 2ème forme...
SQL
SELECT
tetudiant.leprenom,
tetudiant.lenom
FROM tinscription
INNER JOIN tetudiant ON
tetudiant.idetudiant = tinscription.idetudiant
INNER JOIN tclasse ON
tclasse.idclasse = tinscription.idclasse
INNER JOIN tniveau ON
tniveau.idniveau = tclasse.idniveau
INNER JOIN tcycle ON
tcycle.idcycle = tniveau.idcycle
INNER JOIN tannee ON
tannee.idannee = tclasse.idannee
INNER JOIN tspecialite ON
tniveau.idspecialite = tniveau.idspecialite
INNER JOIN tfiliere ON
tfiliere.idfiliere = tspecialite.idfiliere
sortie...
"Aoua";"Coulibaly"
"Aoua";"Coulibaly"
"Aoua";"Coulibaly"
"Aoua";"Coulibaly"
"Kadiatou";"Coulibaly"
"Kadiatou";"Coulibaly"
"Kadiatou";"Coulibaly"
"Kadiatou";"Coulibaly"
"Bintou";"Dembélé"
"Bintou";"Dembélé"
"Bintou";"Dembélé"
"Bintou";"Dembélé"
"Fatoumata";"Bagayoko"
"Fatoumata";"Bagayoko"
"Fatoumata";"Bagayoko"
"Fatoumata";"Bagayoko"
"Fanta";"Bouaré"
"Fanta";"Bouaré"
"Fanta";"Bouaré"
"Fanta";"Bouaré"
"Amadou";"Bah"
"Amadou";"Bah"
"Amadou";"Bah"
"Amadou";"Bah"
_____________________________________
Je constate que la deuxième forme de jointure multiplie par 4 le résultat des deux autres.
Avez-vous des explications. Aux besoin, je peux donner le backup (<300KO) en sql de la base.
Merci d'avance.
Hors ligne
Le fait que les jointures ne sont pas identiques ?
D'un côté:
inner join public.tinscription on tclasse.idclasse = tinscription.idclasse
et de l'autre
FROM tinscription
INNER JOIN tetudiant ON
tetudiant.idetudiant = tinscription.idetudiant
Guillaume.
Hors ligne
Salut
Merci pour la contribution.
En fait le problème vient de l'avant dernière jointure.
INNER JOIN tspecialite ON
tniveau.idspecialite = tniveau.idspecialite
cela crée une jointure croisée.
Il faut avouer que c'était pas évident de le dénicher. Le problème a été détecter par une autre personne ailleurs.
@+
Dernière modification par alassanediakite (21/07/2014 15:21:02)
Hors ligne
Pages : 1