MySQL Multiple Bergabung dalam satu kueri?

121

Saya memiliki pertanyaan berikut:

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

Jadi saya menggunakan INNER JOINdan mengambil file image_id. Jadi sekarang, saya ingin mengambil image_id itu dan mengubahnya menjadi images.filenamedari tabel gambar.

Bagaimana cara menambahkannya ke kueri saya?

Drew
sumber

Jawaban:

209

Anda cukup menambahkan join lain seperti ini:

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 

Namun ketahuilah bahwa, karena ini adalah pesan INNER JOIN, jika Anda memiliki pesan tanpa gambar, seluruh baris akan dilewati. Jika ini adalah kemungkinan, Anda mungkin ingin melakukan LEFT OUTER JOINyang akan mengembalikan semua pesan dasbor Anda dan image_filename hanya jika ada (jika tidak, Anda akan mendapatkan 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 
Code Magician
sumber
19
ada yang tahu bagaimana sebenarnya ini bekerja? Apakah gabungan kedua menggabungkan hasil gabungan pertama dengan tabel 3, atau menggabungkan tabel 1 dengan tabel 3 secara terpisah? (yaitu, menggabungkan tabel 1 dengan tabel 2, dan kemudian menggabungkan tabel 1 secara terpisah dengan tabel 3, kemudian mengembalikan semuanya kembali?) Apakah itu masuk akal? Saya bertanya karena saya telah melakukan penggabungan multi-tabel seperti ini, dan terkadang mendapatkan hasil yang tidak terduga.
Aaron Wallentine
3
Itulah yang akan diberitahukan oleh klausa ON. Klausa ON untuk gabungan ke-2 (bergabung dengan tabel ketiga) menggabungkan dashboard_messages ke gambar di bidang image_id di setiap tabel. Jadi, dalam hal ini A ke B lalu B ke C. Itu di bawah kendali Anda. Anda dapat membuatnya dari A ke B dan A ke C jika perlu
John Biddle
16

Cukup tambahkan gabungan lainnya:

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
Brian Driscoll
sumber
9

Saya membagikan pengalaman saya menggunakan dua LEFT JOINS dalam satu kueri SQL.

Saya memiliki 3 tabel:

Tabel 1) Patient terdiri dari kolom PatientID, PatientName

Tabel 2) Pengangkatan terdiri dari kolom AppointmentID, AppointmentDateTime, PatientID, DoctorID

Tabel 3) Doctor terdiri dari kolom DoctorID, DoctorName


Pertanyaan:

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

Saya menulis solusi untuk mendapatkan format tanggal seperti "bb / hh / yy" (dengan nama saya "VARUN TEJ REDDY")

Varun Tej Reddy
sumber
3

Multi bergabung dalam SQL bekerja dengan secara progresif membuat tabel turunan satu demi satu. Lihat tautan ini menjelaskan prosesnya:

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

Mohit
sumber
2
Selalu kutip bagian paling relevan dari sebuah tautan penting, jika situs target tidak dapat dijangkau atau offline secara permanen.
Armali