2012-01-23 14 views
69

Ho la seguente query:MySQL Multiple Joins in una query?

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 

Quindi io sto usando un INNER JOIN e afferrando il image_id. Quindi ora voglio prendere quell'immagine_id e trasformarla in images.filename dalla tabella delle immagini.

Come posso aggiungerlo alla mia domanda?

+1

http://stackoverflow.com/search?q=mysql+multiple+joins – briantyler

risposta

134

Si può semplicemente aggiungere un altro si uniscono in questo modo:

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 

Tuttavia essere consapevoli che, perché è un INNER JOIN, se si dispone di un messaggio senza un'immagine, l'intera riga verrà saltato. Se questa è una possibilità, si consiglia di fare un LEFT OUTER JOIN che restituirà tutti i vostri messaggi dashboard e un image_filename solo se ne esiste uno (altrimenti si otterrà un valore nullo)

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 
+1

Quanti unisce I può usare in una query mysql? –

+7

qualcuno sa come funziona davvero? Il secondo join si unisce ai risultati del primo join con la tabella 3 o sta unendo separatamente la tabella 1 con la tabella 3? (Ad esempio, unire la tabella 1 alla tabella 2 e quindi unire la tabella 1 separatamente alla tabella 3, quindi restituire tutto indietro?) Ha senso? Chiedo perché sto facendo join multi-table in questo modo ea volte ottengo risultati imprevisti. –

7

Basta aggiungere un altro unirvi:

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 
3

Ho condiviso la mia esperienza sull'utilizzo di due LEFT JOINS in una singola query SQL.

Ho 3 tabelle:

Tabella 1) Paziente consiste colonne PatientID, PatientName

Tabella 2) supplementare consiste colonne AppointmentID, AppointmentDateTime, PatientID, DoctorID

Tabella 3) Medico consiste colonne DoctorID , DoctorName


Query:

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 

ho scritto la soluzione per ottenere date format like "mm/dd/yy" (sotto il mio nome "VARUN TEJ REDDY")