Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Débuter
Débuter Forum d'entraide pour débuter avec MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/03/2006, 08h35   #1
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 6
Points : 6
Par défaut Syntaxe correcte pour jointure en la 2ème et 3ème table

Bonjour à tous,

Encore débutant en requête SQL, je fais appel à vos talents ;-)

Voilà mon problème :

Mes tables : Agenda, Agenda_detail, Contact, Client, Fournisseurs

- Certains Agenda ont un Contact mais pas forcement...
- Les Contact ont soit un Client soit un Fournisseur

Mon But :

-Récupérer les lignes Agenda et Agenda_detail selont certains critères : ça, aucun problème....même s'il n'y a pas de Contact.
Et quand il y a un contact, me ramener le nom du client ou le nom du fournisseur :

Bref quelque chose du genre :

SELECT * //(précisés dans ma reqête mais écourté ici)
FROM Agenda
INNER JOIN Agenda_detail
LEFT OUTER JOIN Contact ON Contact.idcontact = Agenda.idcontact //Retourner agenda même sans contact

??? LEFT OUTER JOIN Client ON Contact.idclient = Client.idclient
LEFT OUTER JOIN Fournisseur ON Contact.idclient = Fournisseur .idfournisseur

WHERE....

Le problème c'est que mes 2 derniers LEFT OUTER JOIN doivent se basent sur Contact et non sur Agenda....

Comment écrire cela ?

Après vient nuturement mon WHERE avec mes conditions de dates sur Agenda....mais aucun problème avec cela.

Un tout grand merci d'avance


Me ramener
Fred_76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2006, 09h38   #2
Membre régulier
 
Avatar de vincedom
 
Inscription : mars 2006
Messages : 87
Détails du profil
Informations personnelles :
Âge : 29
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : mars 2006
Messages : 87
Points : 98
Points : 98
Envoyer un message via MSN à vincedom Envoyer un message via Skype™ à vincedom
Salut


Moi j'essayerai une sous requetes du genre:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
SELECT * //(précisés dans ma reqête mais écourté ici)
FROM Agenda
INNER JOIN Agenda_detail
LEFT OUTER JOIN 
(
SELECT * 
FROM c1 Contact, c2 Contact, Fournisseur, Client
WHERE
c1.idclient = Client.idclient
c2.idclient = Fournisseur .idfournisseur
)
ON Contact.idcontact = Agenda.idcontact //Retourner agenda même sans contact
 
WHERE....
J'ai pas tester le code mais l'idee est la meme si c'est pas forcement la syntaxe la plus jolie...

Le oups c que les sous-requetes marchent seulement a partir de MySQL 4.1...

PS: ta syntaxe avait l'air pas mal... Tu as qu'en meme verifier avant que ca marchait pas ??
vincedom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2006, 11h42   #3
Rédacteur
 
Avatar de pcaboche
 
Homme Pierre Caboche
Inscription : octobre 2005
Messages : 2 197
Détails du profil
Informations personnelles :
Nom : Homme Pierre Caboche
Âge : 32
Localisation : Singapour

Informations forums :
Inscription : octobre 2005
Messages : 2 197
Points : 4 721
Points : 4 721
Par défaut Re: Syntaxe correcte pour jointure en la 2ème et 3ème table

Citation:
Envoyé par Fred_76
Bref quelque chose du genre :

SELECT * //(précisés dans ma reqête mais écourté ici)
FROM Agenda
INNER JOIN Agenda_detail
LEFT OUTER JOIN Contact ON Contact.idcontact = Agenda.idcontact //Retourner agenda même sans contact

??? LEFT OUTER JOIN Client ON Contact.idclient = Client.idclient
LEFT OUTER JOIN Fournisseur ON Contact.idclient = Fournisseur .idfournisseur

WHERE....
Ca me parait très bien tout ça. Il n'y a rien à changer !
pcaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/03/2006, 08h47   #4
Invité régulier
 
Inscription : novembre 2005
Messages : 18
Détails du profil
Informations forums :
Inscription : novembre 2005
Messages : 18
Points : 6
Points : 6
Effetctivement.... je suis un peu moins NULL que je ne le pensais

Je note pour info (même si je ne vous apprendrai pas grand chose : )

SELECT *
FROM Agenda
INNER JOIN Agenda_detail ON agenda_detail.idagenda = agenda_detail.idagenda
LEFT OUTER JOIN (Contact
LEFT OUTER JOIN Client ON Contact.idclient = Client.idclient
LEFT OUTER JOIN Fournisseur ON Contact.idfournisseur = Fournisseur.idfournisseur)
ON Contact.idcontact = Agenda.idcontact
WHERE....

Merci pour pour l'attention portée à mon message....

Fred
Fred_76 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h59.


 
 
 
 
Partenaires

Hébergement Web