2012-01-23 35 views
69

Tôi có truy vấn sau đây:Nhiều kết nối MySQL trong một truy vấn?

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 

Vì vậy, tôi đang sử dụng một INNER JOIN và grabbing image_id. Vì vậy, bây giờ, tôi muốn lấy image_id đó và biến nó thành images.filename từ bảng hình ảnh.

Tôi có thể thêm điều đó vào truy vấn của mình bằng cách nào?

+1

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

Trả lời

134

Bạn chỉ có thể thêm một tham gia như thế này:

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 

Tuy nhiên cần lưu ý rằng, bởi vì nó là một INNER JOIN, nếu bạn có một tin nhắn mà không có một hình ảnh, toàn bộ hàng sẽ được bỏ qua. Nếu đây là một khả năng, bạn có thể muốn làm một LEFT OUTER JOIN mà sẽ trả lại tất cả các thông điệp bảng điều khiển của bạn và một image_filename chỉ nếu có (nếu không bạn sẽ nhận được một 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

bao nhiêu tham gia tôi có thể sử dụng trong một truy vấn mysql? –

+7

ai biết điều này thực sự hoạt động như thế nào? Là sự tham gia thứ hai tham gia các kết quả của việc tham gia đầu tiên với bảng 3, hoặc là nó tham gia bảng 1 với bảng 3 một cách riêng biệt? (tức là, tham gia bảng 1 với bảng 2, và sau đó tham gia bảng 1 một cách riêng biệt với bảng 3, sau đó trả lại tất cả trở lại?) Điều đó có ý nghĩa không? Tôi hỏi vì tôi đã tham gia nhiều bàn tham gia như thế này và đôi khi nhận được kết quả không mong muốn. –

7

Chỉ cần thêm một tham gia:

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

Tôi đã chia sẻ kinh nghiệm của mình về việc sử dụng hai THAM GIA TRÁI trong một truy vấn SQL.

Tôi có 3 bảng:

Bảng 1) Bệnh nhân bao gồm cột PatientID, PatientName

Bảng 2) Bổ nhiệm bao gồm cột AppointmentID, AppointmentDateTime, PatientID, DoctorID

Bảng 3) Doctor bao gồm cột DoctorID , DoctorName


Truy vấn:

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 

tôi đã viết các giải pháp để có được date format like "mm/dd/yy" (dưới tên của tôi "Varun Tej Reddy")

Các vấn đề liên quan