Salut à tous !

J'essaye de faire une requête de sélection en liant plusieures tables.

Je souhaiterais obtenir un nombre de ligne qui soit en rapport avec ma première table, c'est à dire DemandeProduit, je voudrais que quel que soit le nombre d'enregistrements correspondants dans les autres tables liées, j'ai toujours mes lignes issues de DemandeProduit selon les restrictions propre à cette table.

La requête est la suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 
SELECT TourneeMagasin.ordre, 
DemandeProduit.numerobon,
DemandeProduit.codeproduit,
DemandeProduit.quantite,
Produit.libelle,
MagasinProduit.codemagasin,
MagasinProduit.emplacement 
FROM DemandeProduit 
LEFT OUTER JOIN Produit ON DemandeProduit.codeproduit=Produit.code 
INNER JOIN MagasinProduit ON DemandeProduit.codeproduit=MagasinProduit.codeproduit 
LEFT OUTER JOIN TourneeMagasin ON TourneeMagasin.codeproduit=DemandeProduit.codeproduit
WHERE DemandeProduit.numerobon='3' 
AND DemandeProduit.quantite<>0 
AND MagasinProduit.codemagasin='01' 
AND TourneeMagasin.codemagasin='01' 
ORDER BY TourneeMagasin.ordre,
DemandeProduit.numerobon,
MagasinProduit.codemagasin,
MagasinProduit.emplacement,
Produit.libelle;
La structure des tables est la suivante:

DemandeProduit:
numerobon / clé
codeproduit / clé
quantite

Produit:
code / clé
libelle

MagasinProduit:
codemagasin / clé
codeproduit / clé
emplacement

TourneeMagasin:
codemagasin / clé
codeproduit / clé
ordre

cette dernière avec les enregistrements suivants:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
codemagasin   codeproduit   ordre
01                 10020           1
02                 82228           2
01                 10040           3
J'ai cru comprendre que le LEFT OUTER JOIN se comportait de façon à conserver les lignes de la partie gauche sans considérer ce que l'on pourrait avoir de la partie droite, et si ça n'existe pas, les champs sont mis à Null.
Or si dans ma table TourneeMagasin il me manque des enregistrements correspondants, le résultat final ne comportera que les lignes qui auront au moins une valeur pour chaque champ.

Plus précisement, si je retire de ma requête toutes les références à la table TourneeMagasin, j'obtiens ceci:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
numerobon    codeproduit    quantite    libelle    codemagasin    emplacement
3              10020            8.000       aaa       01      	      A      
3              10040            6.000       bbb       01      	      B      
3              82228            16.00       cccc      01              B
La requête telle qu'elle est me donne:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
 
ordre    numerobon    codeproduit    quantite    libelle    codemagasin    emplacement
1         3             10020            8.000       aaa       01             A      
3         3             10040            6.000       bbb       01      	     B

Alors que je m'attendais à ça:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
ordre    numerobon    codeproduit    quantite    libelle    codemagasin    emplacement
1         3             10020            8.000       aaa       01      	      A
Null      3             82228            6.000       bbb       01      	      B       
3         3             10040            6.000       bbb       01      	      B
Ai-je commis une ou des erreur(s) dans la requête ?

D'avance merci !