Requête SQL à double jointure sur une même table [Résolu]

Signaler
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
-
TrafMaxime
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
-
Salut les pros de la prog, voilà le topo :

J'ai une table composant dans laquelle j'ai 2 numéros de fournisseurs : nf1, nf2 et j'aimerai afficher le noms de ceux-ci dans un datagrid en liant la table composant à celle des fournisseurs
J'ai donc commencé la requête suivante, mais je n'arrive pas à renommer mes jointures :
dim sql as string "select composant.*, fournisseur.nf, fournisseur.nom from ((composant inner join fournisseur on composant.nf1 fournisseur.nf) inner join fournisseur AS EXPR2 on composant.nf2 = fournisseur.nf)"

Le message d'erreur (que j'ai en allemand...) me dit que la connexion n'a pu être entretenue, établie..

Est-ce que je ce que je veux faire est possible de cette manière ?
Comment renomme-t-on un champ lorsqu'on s'y connecte ?

.Maytheforcebewithyou.Maxime.

11 réponses

Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
10
salut,

perso j'aurais plus ecrit un truc comme ca :

dim sql as string "select composant.*, fournisseur.nf, fournisseur.nom,fournisseur1.nf, fournisseur1.nom from (composant inner join fournisseur on composant.nf1 fournisseur.nf) inner join fournisseur AS fournisseur1 on composant.nf2 = fournisseur1.nf"

en esperant que ca t'aide
3
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019

Essai cela :
SELECT composant.*, fournisseur.nf, fournisseur.nom FROM ((composant INNER JOIN fournisseur ON (composant.nf1 fournisseur.nf) OR (composant.nf2 fournisseur.nf))

Cela peut peut-être fonctionner

Bonne prog ++
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
.Maytheforcebewithyou.Maxime.
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
Ok merci pour vos réponses les gars, bien essayé, mais toujours pas de fructueuse solution..

Bouv, ta commande marche, mais impossible d'afficher les 2 résultats qui m'intéressent dans le datagrid car le 'mapping est le même : je cherche vraiment à renommer le nom d'une liaison particulière entre les tables..

BasicInstinct : je pense qu'on est sur la bonne voie... à un petit détail prêt ! (j'ai le même message d'erreur qu'avec ma requête..)

Voilà, surtout n'hésitez pas à continuer.. il va bien falloir que je résolve ce problème et je suis sûr que c'est possbile de cette manière..
(l'autre consiste à faire un doublon de la table entière fournisseur en une fournisseur2 et ainsi plus de problème.. mais je ne veux pas en arriver là.. c'est vraiment pas classe et tout ça pour un simple affichage !! allez les gars ! on se motive les troupes !)

.Maytheforcebewithyou.Maxime.
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
J'avoue avoir posté un peu vite... j'avais pas très bien vu toute les finesses de la requête de BasicInstinct, qui est, après mûr examen, bonne.
Du moins sans erreur..

En revanche, la requête me renvoit aucun champ... et ça c'est bizarre.. tu sais pourquoi Basic ?
Une petite relecture ?
je la triture de mon côté aussi et je vous tient au courant.. (même si je préfèrerai que ce soit l'inverse...)

.Maytheforcebewithyou.Maxime.
Messages postés
1411
Date d'inscription
mercredi 6 août 2003
Statut
Membre
Dernière intervention
3 mars 2019

Salut,

Tu n'as absolument aucun champs ?

Essai de remplacer Composant.* par la liste des champs dont tu as besoins.

Bonne prog ++
Messages postés
1471
Date d'inscription
mardi 5 février 2002
Statut
Membre
Dernière intervention
20 octobre 2014
10
perso, je bosse surde l'access, et du SQLServeur
et ce type de requete fonctionne (mes clients hurleraient sinon).

Effectivement, Bouv a peut etre raison, il faudrait essayer de nommer les champs de Composant.*
ainsi que:

fournisseur.nf as F_nf, fournisseur.nom as F_Nom,fournisseur1.nf as F1_nf, fournisseur1.nom as F1_Nom

parce que (il parait, jamais vu perso) certaines BDD sont perturbées d'avoir des champs avec le meme nom dans les requetes.

La requete renvoit aucun champ ? ou aucun enregistrement ?
Si c'est les enregistrements, verifie tes jointures.

++

BasicInstinct
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
Ma base est de l'access aussi, je développe en Vstudio 2002 et côté appels à la base, je dois être en ADO.net...
(provider : MsJet4.0 ole db provider pour la connexion ; oledbdataadapter de VS pour les requêtes..)

La requête ne m'envoit aucun enregistrement (bien que ma table soit évidemment pleine..)
allez, je vous met le string (attention aux yeux, c'est de l'allemand..)
Dim str As String "select bauteile.artikelnr, bauteile.bezeich, bauteile.bezeich2, bauteile.bezeich3, liefernt.lfnr, liefernt.name, liefernt1.lfnr as LF_n1, liefernt1.name as LF_n2 from ((bauteile inner join liefernt on bauteile.lfnr liefernt.lfnr) inner join liefernt as liefernt1 on bauteile.lfnr2 = liefernt1.lfnr)"
Dim dastr As New OleDbDataAdapter(str, cn)
Dim dst As New DataSet()
dst.Clear()
Dim k As Integer
Try
k = dastr.Fill(dst, "bauteile")
Catch bb As Exception
MessageBox.Show(bb.Message)
End Try

' -> k = 0... , mais pas d'erreur..

nota : si je remplace liefernt1.lfnr par LF_n1 à la fin du string (->bauteile.lfnr2 = LF_n1), là, par contre, ça plante..

.Maytheforcebewithyou.Maxime.
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
Concernant les 'champs' ( i.e les colonnes..) là pas de problème, j'ai bien un bon schéma de datagrid.. mais il est vide.. c'est là que c'est pas cool...

Pourtant aucune trace de condition dans la requête... non ? si ?

.Maytheforcebewithyou.Maxime.
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
Ok des nouvelles du déboggage :

la requête accepte les enregistrements qui ont un lfnr = lfnr2 ...

.Maytheforcebewithyou.Maxime.
Messages postés
288
Date d'inscription
mercredi 4 mai 2005
Statut
Membre
Dernière intervention
26 janvier 2012
1
Ok, aujourd'hui est un bien meilleur jour...
En reprenant le problème ce matin je me suis rendu compte que la plupart (tous.., en fait) de mes composants n'avait pas de fournisseur allant avec leur numéro_fournisseur2, et c'est pourquoi la requête ne me retournait aucun champ...
Merci donc beaucoup, j'accepte la précédente réponse très 'basic', et vous en pose éventuellement une autre :
(si vous avez 5 min...)
Est-il possible que ma requête se foute de savoir si le fournisseur2 existe ou non, et me renvoit tous les composants quoiqu'il arrive ?
(ça a l'air un peu plus costaud..)

.Maytheforcebewithyou.Maxime.