145 votes

MySQL Multiple Joins en une seule requête ?

J'ai la requête suivante :

 SELECT
  dashboard_data.headline,
  dashboard_data.message,
  dashboard_messages.image_id 
FROM dashboard_data
INNER JOIN dashboard_messages
  ON dashboard_message_id = dashboard_messages.id

J'utilise donc un INNER JOIN et je saisis le image_id . Alors maintenant, je veux prendre cette image_id et la transformer en images.filename partir de la table des images.

Comment puis-je l'ajouter à ma requête ?

253voto

Code Magician Points 8724

Vous pouvez simplement ajouter une autre jointure comme ceci :

 SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id, images.filename
FROM dashboard_data 
    INNER JOIN dashboard_messages 
        ON dashboard_message_id = dashboard_messages.id
    INNER JOIN images
        ON dashboard_messages.image_id = images.image_id 

Cependant, sachez que, comme il s'agit d'un INNER JOIN , si vous avez un message sans image, la ligne entière sera ignorée. Si c'est une possibilité, vous voudrez peut-être faire un LEFT OUTER JOIN qui renverra tous vos messages de tableau de bord et un image_filename uniquement s'il existe (sinon vous obtiendrez un null)

 SELECT dashboard_data.headline, dashboard_data.message, dashboard_messages.image_id, images.filename
FROM dashboard_data 
    INNER JOIN dashboard_messages 
        ON dashboard_message_id = dashboard_messages.id
    LEFT OUTER JOIN images
        ON dashboard_messages.image_id = images.image_id 

16voto

Brian Driscoll Points 10188

Ajoutez simplement une autre jointure :

 SELECT dashboard_data.headline,
       dashboard_data.message,
       dashboard_messages.image_id,
       images.filename 
FROM dashboard_data 
    INNER JOIN dashboard_messages
            ON dashboard_message_id = dashboard_messages.id 
    INNER JOIN images
            ON dashboard_messages.image_id = images.image_id

6voto

Mohit Points 31

Les jointures multiples en SQL fonctionnent en créant progressivement des tables dérivées les unes après les autres. Voir ce lien expliquant le processus:

https://www.interfacett.com/blogs/multiple-joins-work-just-like-single-joins/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X