Mysql - LEFT JOIN Multiple sur une même table

Mysql - LEFT JOIN Multiple sur une même table - SQL/NoSQL - Programmation

Marsh Posté le 20-12-2007 à 04:20:00    

Bonjour à tous.
 
Je cherche à faire une requette SQL avec un "LEFT JOIN" Multiple sur une même table.
Voici mes tables :
carnet(id,nom)
table2(emeteur,receveur)
 
Les champs de la table 'table2' sont les association du champ 'id' de la table carnet
 
La requette suivante fonctionne bien :
select carnet.nom as emeteur from table2 LEFT JOIN carnet ON table2.emeteur=carnet.id
 
Mais je n'arrive pas à afficher les deux champs :

Code :
  1. SELECT carnet.nom AS emeteur, carnet.nom AS receveur
  2. FROM table2 LEFT JOIN carnet ON table2.emeteur=carnet.id AND table2.receveur=carnet.id


Cette dernière requette ne retourne pas d'erreur, mais les champs sont vide.
Je doit faire une erreur quelque part.
Est-ce que quelqu'un connaît une solution ?
Merci d'avance.


Message édité par samyl le 20-12-2007 à 15:09:56
Reply

Marsh Posté le 20-12-2007 à 04:20:00   

Reply

Marsh Posté le 20-12-2007 à 10:38:03    

ce sont deux informations différentes que tu cherches à remonter, il te faut donc jointer deux fois sur ta table carnet ( comme le laisse d'ailleurs entendre le titre de ton topic).
Par contre la chose à savoir dans le cas de "join multiples" sur une même table c'est de ne pas oublier d'aliaser.

Code :
  1. SELECT
  2.  emeteur.nom AS nom_emeteur,
  3.  receveur.nom AS nom_receveur
  4. FROM
  5.  table2
  6.  LEFT JOIN carnet AS emeteur ON table2.emeteur=emeteur.id
  7.  LEFT JOIN carnet AS receveur ON table2.receveur=receveur.id

Reply

Marsh Posté le 20-12-2007 à 15:53:57    

Merci beaucoup, ça marche parfaitement.
Cette façon fût ma première idée, mais j'avais effectivement omis d'aliaser les table (je ne connaissait pas).
:jap:
 
Voici maintenant ma requette qui fonctionne :

Code :
  1. SELECT facture.date, facture.numero,  emeteur.nom AS emeteur, receveur.nom AS receveur, facture.ttc
  2. FROM facture
  3.  LEFT JOIN carnet AS emeteur ON facture.emeteur=emeteur.id
  4.  LEFT JOIN carnet AS receveur ON facture.receveur=receveur.id
  5. WHERE facture.date >='2007-06-01'
  6.  AND facture.date <'2007-07-01'
  7. ORDER BY date,emeteur
  8. LIMIT 0,100


 
J'obtient ainsi une liste des 100 1ères factures du mois de Juin avec 4 colonnes :
 Date , Emeteur , Receveur (destinataire) , Montant TTC
 
Merci Anapajari ! J'aurais mis du temps à comprendre seul.

Reply

Marsh Posté le 20-12-2007 à 15:55:49    

between c'est mieu que des > et < (attention cependant, between c'est inclusif)


Message édité par MagicBuzz le 20-12-2007 à 15:56:06
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed