|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 7 ![]() |
Bonjour,
Ça fait maintenant plusieurs heures que je me prends la tête pour écrire une requête SQL utilisant de multiples jointures. Voici le design de ma base de données: _VOITURE___________PIECE_______________MOTEUR +--------+_______+-----------+_______+----------------+ |.ID........|_______|.ID............|_______|.ID...................| |.Couleur.|_______|.Parent_ID..|_______|.Parent_ID.........| +--------+_______|.Name........|_______|.Type...............| ________________+-----------+_______+----------------+ Évidemment, une voiture est composée de pièces et de moteur (au moins un). Le moteur est composé de pièces également. Mon objectif: Ecrire une requête SQL me permettant de récupérer une table sous cette forme: ____VOITURE.ID_____MOTEUR.ID_______PIECE.NAME +----------------+----------------+--------------------+ |...........1..........|.......NULL..........|.....Allume.cigare......| |...........1..........|.......NULL..........|.....Phare.droit.........| |...........1..........|.......NULL..........|.....Phare.gauche......| |...........1..........|..........1............|.........Piston.1.........| |...........1..........|..........1............|.........Piston.2.........| |...........1..........|..........1............|.........Carter...........| |...........1..........| ..........1............|.........Bielle.............| |...........2...........|.......NULL.........|........Allume.cigare....| |...........2...........|.......NULL.........|.........Phare.droit......| +----------------+----------------+--------------------+ J'ai essayé avec des INNER JOIN mais sans succès: Code :
Si vous avez des idées.....??? Merci |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() Yannick Ingénieur Etudes & Developpements Inscription : février 2006 Messages : 1 125 ![]() |
il vous faudra passer par une jointure externe pour cela
Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac) |
|
|
00
|
|
|
#3 |
|
Membre Expert
![]() Responsable de service informatique Inscription : janvier 2009 Messages : 1 085 ![]() |
Bonjour,
La clause SELECT n'est pas bonne non plus car la table PIECE a un alias (en fait 2) dans la clause FROM. Tatayo. |
|
|
00
|
|
|
#4 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
absolument
et attention aux noms des tables si on utilise des ALIAS. dans la clause SELECT il y est noté la table PIECE qui, virtuellement, n'existe plus. |
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 7 ![]() |
@tatayo
Dans ce cas il faudrait que je fasse deux colonnes dans mon select. Il y a pas un moyen de les joindres? @Yanika_bzh Si je passe par une jointure externe, j'aurais aussi toutes les entrées de MOTEUR sans pouvoir limiter avec un WHERE VOITURE.ID = '1' Merci pour votre rapidité et vos réponses |
|
|
00
|
|
|
#6 | ||
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
en utilisant le UNION
Code :
|
||
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Heu... vous semblez avoir un énorme problème de modélisation Qu'est-ce qui vous permet de savoir que pour une pièce donnée ayant par exemple parent_ID = 3, il s'agit d'une pièce de la voiture ayant l'ID 3 ou d'une pièce du moteur ayant l'ID 3 ??? quelque chose m’échappe ! A moins que vous n'ayez une règle afin qu'une valeur d'ID pour une voiture ne puisse servir d'ID pour un moteur et vice versa... mais... je reste perplexe ! Je crois qu'une petite explication/révision de votre modèle s'impose... |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 7 ![]() |
Merci de votre réponse.
Il est vrai que je n'ai rien dit là-dessus. En effet l'id du moteur et forcement différent de l'id de la voiture ou d'une pièce... En gros les ID ressemblent à ca: ID voiture: voiture_1 ID moteur: moteur_1 ID piece: piece_1 Le problème ne vient donc pas de là. Merci de votre réponse |
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 7 ![]() |
Apparement, UNION n'est pas supporté par MS-SQL car j'obtiens le message d'erreur suivant:
"The Query Designer does not support the UNION SQL construct." Et j'obtiens aussi une erreur en passant par php... |
|
|
00
|
|
|
#10 |
|
Membre émérite
![]() Olivier DehorterIngenieur de recherche - Ecologue Inscription : juin 2003 Messages : 697 ![]() |
Si UNION, n'est pas supporté par MS-SQL alors je mange mes semelles
|
|
|
00
|
|
|
#11 | |
|
Membre habitué
![]() Robert LabrousseDéveloppeur décisionnel Inscription : février 2009 Messages : 79 ![]() |
UNION est supporté par tous les SGBD dignes de ce nom
__________________
Citation:
|
|
|
|
00
|
|
|
#12 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 7 ![]() |
Ok je viens de vérifier. En effet UNION et supporté par MS-SQL.
L'erreur affichée ne concernait que l’éditeur de requêtes... Et je pense pouvoir me debrouiller avec UNION.... Je passe le sujet en resolu. Merci à vous tous. |
|
|
00
|
|
|
#13 |
![]() ![]() ![]() Cédric DuprezInscription : avril 2002 Messages : 3 823 ![]() |
Et même par des SGBD pas toujours dignes de ce nom
...
__________________
Rédacteur / Modérateur SGBD Mes tutoriels et la FAQ MySQL ---------------------------------------------------- Pensez aux balises code et au tag Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
En l’occurrence, il me semble qu'un UNION ALL serait même possible et éviterait au sgbd un travail inutile de dédoublonnage, puisque a priori, il ne peut y avoir de doublon (à moins d'avoir des doublons dans les tables elles-même, mais c'est alors un autre problème)
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com