2012-01-23 29 views
69

Mam następujące zapytanie:MySQL Multiple Joins w jednym zapytaniu?

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 

Więc używam INNER JOIN i chwytając się image_id. Teraz chcę wziąć ten image_id i przekształcić go w images.filename z tabeli obrazów.

Jak mogę dodać to do mojego zapytania?

+1

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

Odpowiedz

134

można po prostu dodać kolejny przyłączyć tak:

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 

jednak mieć świadomość, że ponieważ jest to INNER JOIN, jeśli masz wiadomość bez obrazu, cały wiersz zostanie pominięte. Jeśli jest to możliwe, może chcesz zrobić LEFT OUTER JOIN która zwróci wszystkie wiadomości na tablicy rozdzielczej i image_filename tylko jeśli taki istnieje (inaczej dostaniesz 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

Ile dołącza I można użyć w zapytaniu mysql? –

+7

ktoś wie, jak to działa? Czy drugi łącznik dołącza wyniki pierwszego sprzężenia do tabeli 3, czy też osobno łączy tabelę 1 z tabelą 3? (tzn. połączyć tabelę 1 z tabelą 2, a następnie połączyć tabelę 1 osobno z tabelą 3, a następnie zwrócić wszystko z powrotem?) Czy to ma sens? Pytam, ponieważ robiłem połączenia wielostolikowych w ten sposób, a czasami uzyskać nieoczekiwane wyniki. –

7

Wystarczy dodać kolejny dołączyć:

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

Podzieliłem się doświadczeniem używania dwóch LEWYCH DOŁĄCZYŃ w jednym zapytaniu SQL.

mam 3 tabele:

tabela 1) Pacjent składa kolumny ID_Pacjenta, PatientName

Tabela 2) wyboru polega kolumny AppointmentID, AppointmentDateTime, ID_Pacjenta, DoctorID

Tabela 3) Lekarz składa kolumny DoctorID , DoctorName


Zapytanie:

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 

napisałem rozwiązanie, aby uzyskać date format like "mm/dd/yy" (pod moją nazwą "Varun TEJ REDDY")

Powiązane problemy