web-dev-qa-db-fra.com

MySQL Plusieurs jointures dans une 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 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 ajouter cela à ma requête?

100
Drew

Vous pouvez simplement ajouter une autre jointure comme celle-ci:

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 cela est possible, vous voudrez peut-être faire un LEFT OUTER JOIN qui renverra tous vos messages de tableau de bord et un nom de fichier image uniquement s'il en existe un (sinon, vous obtiendrez une valeur nulle).

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 
179
Code Magician

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
10
Brian Driscoll

J'ai partagé mon expérience d'utilisation de deux liaisons gauche dans une requête SQL unique.

J'ai 3 tables:

Tableau 1) Le patient est composé des colonnes PatientID, PatientName

Tableau 2) Le rendez-vous est composé des colonnes ID de rendez-vous, Heure du rendez-vous, ID de patient, ID de docteur

Tableau 3) Doctor est composé de colonnes DoctorID, DoctorName


Requete:

SELECT Patient.patientname, AppointmentDateTime, Doctor.doctorname

FROM Appointment 

LEFT JOIN Doctor ON Appointment.doctorid = Doctor.doctorId  //have doctorId column common

LEFT JOIN Patient ON Appointment.PatientId = Patient.PatientId      //have patientid column common

WHERE Doctor.Doctorname LIKE 'varun%' // setting doctor name by using LIKE

AND Appointment.AppointmentDateTime BETWEEN '1/16/2001' AND '9/9/2014' //comparison b/w dates 

ORDER BY AppointmentDateTime ASC;  // getting data as ascending order

J'ai écrit la solution pour obtenir format de date comme "mm/jj/aa" (sous mon nom "VARUN TEJ REDDY")

8
Varun Tej Reddy

Les jointures multiples dans 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/

0
Mohit