Votre syntaxe à base de parenthèses imbriquées est particulièrement délirante. Votre requête devrait être écrite de la sorte :
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT LTE.tblEpreuve_txtNomFr, LPECPMA.tblPerformance_sngPerformance, M.tblMembre_txtLogin
FROM rqtListerToutesEpreuves AS LTE
LEFT OUTER JOIN rqtListerPerformancesEtCalculerPositionsMembresActifs AS LPECPMA
ON LPECPMA.tblPerformance_blnRespectRegles_tblRespectRegles
= LTE.tblRespectRegles_blnRespectRegles
AND LPECPMA.tblPerformance_octOrdre_tblEpreuve
= LTE.tblEpreuve_octOrdre
AND LPECPMA.tblMembre_lngNumAuto
= LTE.Param_NumMembre
LEFT OUTER JOIN tblMembre AS M1
ON M1.tblMembre_lngNumAuto=LPECPMA.tblMembre_lngNumAuto
WHERE M1.tblMembre_txtLogin=M1.tblMembre_txtLogin |
Dès lors il est normal qu'avec ou sans le WHERE le résultat diffère. En effet si pour certaines lignes, la colonne tblMembre_txtLogin n'est pas renseignée (marqueur NULL) alors la comparaison vaut UNKNOWN et n'est donc pas prise en compte.
En revanche en l'absence de cette clause WHERE toutes les lignes sont prise en compte même celles dont la colonne tblMembre_txtLogin n'est pas renseignée.
Si vous voulez le prouver, il suffit de rajouter le prédicat suivant à la clause WHERE :
OR M1.tblMembre_txtLogin IS NULL
ou encore de porter cette clause WHERE dans le prédicat de jointure entre les tables d'alias M1 et LPECPMA, par exemple comme ceci :
1 2 3 4 5 6 7 8 9 10 11 12
| SELECT LTE.tblEpreuve_txtNomFr, LPECPMA.tblPerformance_sngPerformance, M.tblMembre_txtLogin
FROM rqtListerToutesEpreuves AS LTE
LEFT OUTER JOIN rqtListerPerformancesEtCalculerPositionsMembresActifs AS LPECPMA
ON LPECPMA.tblPerformance_blnRespectRegles_tblRespectRegles
= LTE.tblRespectRegles_blnRespectRegles
AND LPECPMA.tblPerformance_octOrdre_tblEpreuve
= LTE.tblEpreuve_octOrdre
AND LPECPMA.tblMembre_lngNumAuto
= LTE.Param_NumMembre
LEFT OUTER JOIN tblMembre AS M1
ON M1.tblMembre_lngNumAuto=LPECPMA.tblMembre_lngNumAuto
AND M1.tblMembre_txtLogin=M1.tblMembre_txtLogin |
Le mieux que je puisse vous conseiller, c'est d'apprendre le langage SQL... Mon site SQLpro comme mes bouquins peuvent vous y aider !
Enfin, sachez que le niveau de SQL d'Access n'est même pas au niveau de la norme de 1992 (SQL est un langage fortement normalisé). Or nous en sommes à la norme 2003 après avoir passer l'importante norme SQL:1999 (relationnel objet). De plus le format de base de données Access et le moteur relationnel associé (jet) est d'une pérénité plutôt incertaine...
Passez donc à MSDE ou SQL Server Express qui sont des version light et gratuite du moteur de MS SQL Server 2000 et 2005.
A +
Partager