MySQL Multiple Joins ในแบบสอบถามเดียว?


121

ฉันมีคำถามต่อไปนี้:

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จากตารางรูปภาพ

ฉันจะเพิ่มสิ่งนั้นในแบบสอบถามของฉันได้อย่างไร


คำตอบ:


209

คุณสามารถเพิ่มการเข้าร่วมอื่นได้ดังนี้:

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 

19
มีใครรู้บ้างว่าวิธีนี้ใช้งานได้จริง? การเข้าร่วมครั้งที่สองเป็นการเข้าร่วมผลลัพธ์ของการเข้าร่วมครั้งแรกกับตาราง 3 หรือเป็นการเข้าร่วมตาราง 1 กับตาราง 3 แยกกัน? (เช่นการเข้าร่วมตาราง 1 กับตาราง 2 แล้วรวมตาราง 1 แยกกับตาราง 3 แล้วส่งคืนทั้งหมดหรือไม่) นั่นสมเหตุสมผลหรือไม่? ฉันถามเพราะฉันทำการรวมหลายโต๊ะแบบนี้และบางครั้งก็ได้ผลลัพธ์ที่ไม่คาดคิด
Aaron Wallentine

3
นั่นคือสิ่งที่คำสั่ง ON จะบอกคุณ คำสั่ง ON สำหรับการรวมครั้งที่ 2 (การเข้าร่วมตารางที่สาม) คือการเข้าร่วม dashboard_messages กับรูปภาพบนฟิลด์ image_id ในแต่ละตาราง ดังนั้นในกรณีนี้คือ A ถึง B แล้ว B ถึง C อยู่ภายใต้การควบคุมของคุณ คุณสามารถทำให้เป็น A ถึง B และ A ถึง C ได้หากต้องการ
John Biddle

16

เพียงเพิ่มการเข้าร่วมอื่น:

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

9

ฉันแบ่งปันประสบการณ์การใช้ LEFT JOINS สองรายการในแบบสอบถาม SQL เดียว

ฉันมี 3 โต๊ะ:

ตารางที่ 1) ผู้ป่วยประกอบด้วยคอลัมน์ PatientID, PatientName

ตารางที่ 2) การนัดหมายประกอบด้วยคอลัมน์ AppointmentID, AppointmentDateTime, PatientID, DoctorID

ตารางที่ 3) Doctor ประกอบด้วยคอลัมน์ 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

ฉันเขียนวิธีแก้ปัญหาเพื่อรับรูปแบบวันที่เช่น "mm / dd / yy" (ภายใต้ชื่อของฉัน "VARUN TEJ REDDY")


3

การรวม Multi ใน SQL ทำงานโดยการสร้างตารางที่ได้รับทีละตาราง ดูลิงค์นี้อธิบายกระบวนการ:

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


2
อ้างอิงส่วนที่เกี่ยวข้องที่สุดของลิงก์ที่สำคัญเสมอในกรณีที่ไซต์เป้าหมายไม่สามารถเข้าถึงได้หรือออฟไลน์ถาวร
Armali
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.