Prenons un exemple simplifié de gestion des cotisations d’adhérents :
On veut pour l’année 2011 la liste de tous les adhérents avec le montant de la cotisation ou la mention « pas de cotisation » s’ils n’ont pas cotisé en 2011.
Évidemment la 1ère tentative avec la jointure naturelle par défaut ne convient pas :
PERDU !
On pense à faire une jointure externe de type « 2 ».
Une nouvelle tentative :
Si on complète avec le critère de restriction sur l’année 2011 :
PERDU !!
Comme le décrit Cinephil dans son blog:
Quand on fait une jointure externe à gauche et qu’on pose une restriction (dans le WHERE) sur la table de droite, c’est comme si on faisait une jointure interne !
La solution, toujours proposée par CinePhil :
… il faut déplacer les conditions de restriction sur la table externe du WHERE vers la condition de jointure.
Comme la modification qui suit n’est pas interprétable dans le QBE d’Access, j’édite la requête précédente en mode SQL…
… et je la modifie en déplaçant le critère WHERE dans la condition de jointure ON (attention aux parenthèses):
GAGNÉ !!