MySQL Multiple Joins в одном запросе? - PullRequest
99 голосов
/ 23 января 2012

У меня следующий запрос:

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 из таблицы изображений.

Как я могу добавить это к моему запросу?

Ответы [ 4 ]

177 голосов
/ 23 января 2012

Вы можете просто добавить еще одно соединение, как это:

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, который будет возвращать все ваши сообщения панели и имя_файла, только если оно существует (в противном случае вы получите ноль)

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 
9 голосов
/ 23 января 2012

Просто добавьте еще одно соединение:

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
8 голосов
/ 16 сентября 2014

Я поделился своим опытом использования двух 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

Я написал решение, чтобы получить формат даты вроде "мм / дд / гг" (под моим именем "VARUN TEJ REDDY")

0 голосов
/ 15 марта 2019

Многократные объединения в SQL работают путем постепенного создания производных таблиц одна за другой. Смотрите эту ссылку, объясняющую процесс:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...