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:
La structure des tables 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;
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:
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.
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
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:
La requête telle qu'elle est me donne:
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
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:
Ai-je commis une ou des erreur(s) dans la requête ?
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
D'avance merci !
Partager