it-swarm.com.de

MySQL Multiple Joins in einer Abfrage?

Ich habe folgende Anfrage:

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

Also benutze ich einen INNER JOIN Und greife nach dem image_id. Nun möchte ich diese image_id nehmen und aus der images-Tabelle in images.filename Umwandeln.

Wie kann ich das zu meiner Anfrage hinzufügen?

100
Drew

Sie können einfach einen weiteren Join wie diesen hinzufügen:

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 

Beachten Sie jedoch, dass es sich um ein INNER JOIN Wenn Sie eine Nachricht ohne Bild haben, wird die gesamte Zeile übersprungen. Wenn dies eine Möglichkeit ist, möchten Sie vielleicht ein LEFT OUTER JOIN gibt nur dann alle Ihre Dashboard-Nachrichten und einen image_filename zurück, wenn einer existiert (andernfalls erhalten Sie eine 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 
179
Code Magician

Fügen Sie einfach einen weiteren Join hinzu:

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

Ich habe meine Erfahrungen mit der Verwendung von zwei LEFT JOINS in einer einzigen SQL-Abfrage geteilt.

Ich habe 3 Tische:

Tabelle 1) Patient besteht aus den Spalten PatientID, PatientName

Tabelle 2) Termin besteht aus den Spalten TerminID, TerminDatumZeit, PatientenID, ArztID

Tabelle 3) Doctor besteht aus den Spalten DoctorID und DoctorName


Abfrage:

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

Ich habe die Lösung geschrieben, um Datumsformat wie "MM/TT/JJ" (unter meinem Namen "VARUN TEJ REDDY") zu erhalten.

8
Varun Tej Reddy

Mehrfachverknüpfungen in SQL funktionieren, indem schrittweise nacheinander abgeleitete Tabellen erstellt werden. Siehe diesen Link, der den Prozess erklärt:

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

0
Mohit