[MSDE] SELECT et LEFT OUTER JOIN
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:
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:
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:
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:
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:
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 !