Probleme redaction requete SQL

Résolu/Fermé
Sissou1970 Messages postés 23 Date d'inscription mercredi 10 octobre 2012 Statut Membre Dernière intervention 8 mai 2015 - 10 oct. 2012 à 09:43
Sissou1970 Messages postés 23 Date d'inscription mercredi 10 octobre 2012 Statut Membre Dernière intervention 8 mai 2015 - 11 oct. 2012 à 08:13
Bonjour,

Je me permets de faire appel à votre aide car j'ai un problème de rédaction de requête SQL. Je suis en train d'essayer d'apprendre à rédiger des requêtes SQL et cela fait 2 semaines que je planche dessus sans parvenir à un résultat correct.

Je travaille sur une base de donnée qui contient 4 tables que je souhaite associer entre elles :
-Table 1 : BaseProduits contient Numero (qui correspond à un produit), IDAtelier (sous forme de numero qui correspond à un atelier de fabrication), IDLieuDeStockage par defaut sous forme de numero qui correspond à un endroit de stockage)
-Table 2 : Produits contient Numero, Code et Libelle (le numero correspond à celui de la table 1)
-Table 3 : Ateliers contient Numero et Libelle (le numero correspond à l'IDAtelier de la table 1)
-Table 4 : LieuxDeStockage contient Numero et Libelle (le numero correspond à l'IDLieuDeStockagede la table 1)

Ce que je souhaite, c'est lier ces 4 tables afin d'obtenir les infos de la table 1 sous forme de Libelle et non de numero.

J'arrive à lier 2 tables entre elles :

-Lier les 2 tables BaseProduits et Produits
SELECT BaseProduits.Numero, Produits.Code, Produits.Libelle, BaseProduits.IDAtelier
FROM BaseProduits
JOIN Produits
ON BaseProduits.Numero = Produits.Numero

-Lier les 2 tables BaseProduits et Ateliers
SELECT BaseProduits.Numero, BaseProduits.IDAtelier, Ateliers.Libelle
FROM BaseProduits
JOIN Ateliers
ON BaseProduits.IDAtelier = Ateliers.Numero

J'obtiens les différents libelles qui m'interessent, mais lorsque j'essaie d'en lier 3, la requête ne m'affiche que le libellé du produit :

SELECT BaseProduits.Numero, Produits.Code, Produits.Libelle, BaseProduits.IDAtelier, Ateliers.Libelle
FROM BaseProduits
JOIN Produits
ON Produits.Numero = BaseProduits.Numero
JOIN Ateliers
ON BaseProduits.IDAtelier = Ateliers.Numero

Je vous remercie par avance pour votre aide.

2 réponses

Morgothal Messages postés 1236 Date d'inscription jeudi 22 avril 2010 Statut Membre Dernière intervention 19 mai 2015 183
10 oct. 2012 à 14:41
Bonjour,
Par souci de compréhension, n'aurait-il pas été plus simple d'assigner le même nom de champ aux colonne représentant la même chose ? Je pense par exemple à Ateliers.Numero qui devrait s'appeler Ateliers.IDAtelier...

La requête a l'air correcte, peut être les champs ne correspondent pas ? Il faudrait essayer avec LEFT OUTER JOIN plutôt que JOIN. Ca permet de retourner toutes les lignes, et de voir les concordances "à la main" : si la ligne est vide après la première colonne BaseProduits.Numero, c'est qu'il n'y a pas ce numéro dans les autres tables.

Parce qu'ici, le JOIN agit comme un filtre, et parmis les Numero communs entre BaseProduits et Produits, aucun ne correspond aux Numero de la table Ateliers...
0
Sissou1970 Messages postés 23 Date d'inscription mercredi 10 octobre 2012 Statut Membre Dernière intervention 8 mai 2015
11 oct. 2012 à 08:13
Bonjour,

Merci de ta réponse Morgothal.

J'aurais dû préciser que j'étais novice et que c'est ma première requête que je tente de rédiger.

Effectivement mon problème semble venir du fait que les termes "Libelle" se ressemble trop. Il m'a suit de renommer Produits.Libelle et Ateliers.Libelle, pour résoudre mon problème :

SELECT BaseProduits.Numero, Produits.Code, Produits.Libelle AS Lib_P, BaseProduits.IDAtelier, Ateliers.Libelle AS Lib_A
FROM BaseProduits
JOIN Produits
ON Produits.Numero = BaseProduits.Numero
JOIN Ateliers
ON BaseProduits.IDAtelier = Ateliers.Numero

Comme quoi, en informatique il sufit de pas grand chose,

Encore merci pour ton aide
Mon probleme est RESOLU.
0