Relier trois tables ...

Résolu/Fermé
YY - 15 juil. 2013 à 15:12
 YY - 16 juil. 2013 à 09:11
Bonjour,

Dans ma base j'ai trois tables : PIECE, SOUS_PIECE, et PLAN.

J'ai des jointures entre PIECE et SOUS_PIECE. SOUS_PIECE et PLAN, PLAN et PIECE.

Quand je fais un select j'obtiens bien toutes les données (entre deux tables a chaque fois). Par contre si jessaye de selectionner les données des trois tables réunies, ca ne me renvoie rien. Je ne comprends pas pourquoi...

Merci d'avance pour votre aide

YY

2 réponses

arthurg95 Messages postés 2399 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
15 juil. 2013 à 15:13
Bonjour,

Quelle requête effectuez vous pour "réunir les 3 tables" ?
1
Bonjour,

Voici ma requête :

SELECT        [PLAN].NoPlan, SOUS_PIECE.id_SP, PIECE.NoSerie
FROM            [PLAN] INNER JOIN
                         PIECE ON [PLAN].NoPlan = PIECE.NoPlan INNER JOIN
                         SOUS_PIECE ON PIECE.NoSerie = SOUS_PIECE.idPiece AND [PLAN].NoPlan = SOUS_PIECE.NoPlanSP


que j'essaie d'executer mais sans aucune valeur de retour...

Merci
0
En me relisant, je me demande si ce n'est pas une erreur de conception de la BDD...
Une pièce n'est concernée que par UN plan.
Un plan peut concerner plusieurs sous pièces (et encore que)..
Dans mon cas ne serait ce pas plus logique de supprimer la table Plan ?
J'avais fait mon MCD avec MERISE
0
arthurg95 Messages postés 2399 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
15 juil. 2013 à 15:28
Essayez avec des NATURAL JOIN, comme ceci :

SELECT ... FROM PIECE NATURAL JOIN SOUS_PIECE NATURAL JOIN PLAN
0
J'obtiens 'Erreur dans l'expression de jointure.
Impossible d'analyser le texte de la requête.'.

Je travaille sous SQLSERVER
0
arthurg95 Messages postés 2399 Date d'inscription dimanche 24 février 2008 Statut Membre Dernière intervention 4 juin 2014 341
15 juil. 2013 à 15:37
Ah oui ce n'est pas suppôrté par SQLSERVER...

Bon bah à l'ancienne...
SELECT ...
FROM piece, sous_piece, plan
WHERE plan.noplan = piece.noplan
AND piece.noserie = sous_piece.id[.....]

Ah merde, je viens de voir l'erreur... Il faut que les colonnes contiennes le mêmes mêmes valeur pour que la jointure soit faite...

Par exemple, dans Piece vous avez dans la colonne idpiece : 1234, 4567
Si dans sous piece vous n'avez que 1234, seule la ligne avec 1234 apparaitra ;)
Et comme je vous que vos colonne n'ont pas les mêmes nom dans les tables, cette condition n'est probablement pas respecté, si ?
0
Pourtant je crois bien que oui ...

Si je requete entre piece et sous_piece : j'obtiens bien id_Sp=1047 et NoSerie=00001
SI je requete entre piece et plan : j'obtiens bien NoSerie=00001 et NoPlan=12345
Maintenant si je requete entre sous_piece et plan : NoPlan=12345 et id_SP=1047.

Donc a priori tout se recoupe bien. Par contre si je requete les trois tables a la fois je n'obtiens rien du tout....

Est il nécessaire que je garde une entité Plan ?
0