[Résolu][MySQL] Jointure à 5 tables

Jointure à 5 tables [Résolu][MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 18-08-2009 à 00:41:51    

Bonjour @ tous,
 
J'ai 1 base MySQL dans laquelle j'ai 5 tables où table_index référence un élément en fonction de son type (valué à 2, 3, 4 ou 5).
 
table_index
- id
- type
- id_element
 
table1
- id
- nom
- date
 
table2
- id
- nom
- date
 
table3
- id
- nom
- date
 
table4
- id
- nom
- date
 
Je veux faire un SELECT table_index en triant par la date de l'élément (provenant soit de table1, table2, table3 ou table4).
 
Voici ce que j'ai essayé mais ça ne marche pas, qu'est-ce qui ne va pas ???

Code :
  1. SELECT table_index.id, id_type, id_element, table1.nom, table1.date, table2.nom, table2.date, table3.nom, table3.date, table4.nom, table4.date FROM table_index
  2. INNER JOIN table1 ON (table_index.id_type=2 AND table_index.id_element = table1.id)
  3. INNER JOIN table2 ON (table_index.id_type=3 AND table_index.id_element = table2.id)
  4. INNER JOIN table3 ON (table_index.id_type=4 AND table_index.id_element = table3.id)
  5. INNER JOIN table4 ON (table_index.id_type=5 AND table_index.id_element = table4.id)
  6. ORDER BY table1.date, table2.date, table3.date, table4.date DESC;


Message édité par PacoDL le 18-08-2009 à 01:44:59
Reply

Marsh Posté le 18-08-2009 à 00:41:51   

Reply

Marsh Posté le 18-08-2009 à 01:44:22    

Finalement, j'ai trouvé la réponse, je poste la bonne requête :
 

Code :
  1. SELECT table_index.id, id_type, id_element, table1.nom, table1.date, table2.nom, table2.date, table3.nom, table3.date, table4.nom, table4.date FROM table_index
  2. LEFT JOIN table1 ON (table_index.id_type=2 AND table_index.id_element = table1.id)
  3. LEFT JOIN table2 ON (table_index.id_type=3 AND table_index.id_element = table2.id)
  4. LEFT JOIN table3 ON (table_index.id_type=4 AND table_index.id_element = table3.id)
  5. LEFT JOIN table4 ON (table_index.id_type=5 AND table_index.id_element = table4.id)
  6. ORDER BY COALESCE(table1.date, table2.date, table3.date, table4.date) DESC;

Reply

Sujets relatifs:

Leave a Replay

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