2012-01-23 46 views
69

我有以下查詢:MySQL多聯接在一個查詢中?

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 

所以我使用的是INNER JOIN並抓住image_id。所以現在,我想把image_id變成images.filename從圖像表中。

我該如何將其添加到我的查詢中?

+1

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

回答

134

你可以簡單地添加其他加入這樣的:

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 

但是要注意的是,因爲它是一個INNER JOIN,如果你有沒有圖像的消息時,整個行會被跳過。如果這是一個可能性,你可能想要做一個LEFT OUTER JOIN將返回所有的板消息且僅當一箇中存在IMAGE_FILENAME(否則你會得到一個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 
+1

多少加入我可以在一個mysql查詢中使用? –

+7

有人知道這實際上是如何工作的?第二個連接將第一個連接的結果與表3分開,還是將表1與表3分開連接? (即,將桌子1與桌子2連接,然後將桌子1與桌子3分開連接,然後將它們全部返回?)這有意義嗎? 我問,因爲我一直在做這樣的多表連接,有時會得到意想不到的結果。 –

7

只需要添加另外加入:

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

我分享了我在單個SQL查詢中使用兩個LEFT JOIN的經驗。

我有3個表:

表1)患者由列PatientID,PatientName

表2)任命由AppointmentID,AppointmentDateTime,PatientID列,DoctorID

表3)醫生由列DoctorID ,DoctorName


查詢:

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 

我寫的解決方案,使date format like "mm/dd/yy"(我名下的 「VARUN TEJ REDDY」)