#mysql #sql #database #mysql-workbench #outer-join
Вопрос:
Итак, вот база данных, которая у меня есть: https://imgur.com/EmQm9vx
Прошло некоторое время с тех пор, как я в последний раз работал с базой данных MySQL, поэтому у меня было несколько проблем, которые мне нужно решить.
Прежде всего, мне нужно написать запрос, который покажет мне как имя ученика, так и класс, в котором он зарегистрирован. Я пробовал кое-что с «ГДЕ», но часто терялся.
РЕШЕНИЕ: Использование СОЕДИНЕНИЯ-это правильный путь, так как вам нужно подключить 3 таблицы.
Комментарии:
1. пожалуйста, поделитесь образцами данных со сценариями создания таблицы и вставки данных. Изображение не будет работать. Кроме того, по одному вопросу на пост.
2. Задавайте свои другие вопросы в отдельном посте.
3. Вы отметили
outer join
, но это будет использоваться только в том случае, если вам нужны ученики, у которых нет соответствующего класса и/или классов, у которых нет соответствующего ученика. Вам нужно будет указать это требование. Если вы хотите , чтобы придерживались только совпадений[INNER] JOIN
, гдеINNER
ключевое слово необязательно.
Ответ №1:
Начните с первого вопроса. У нас есть отношения «многие ко многим», в которых класс student_class связывает каждый идентификатор student_id с идентификатором класса, но имена хранятся в связанной таблице учащихся и таблице классов. Поэтому нам нужно объединить все три таблицы.
SELECT student.name, class.name
FROM student
JOIN student_class
ON student.id = student_class.student_id
JOIN class
ON class.id = student_class.class_id
;
Ответ №2:
Вам нужно внутренне объединить таблицу учащихся с таблицей регистрации классов на основе идентификатора учащегося, а затем объединить таблицу регистрации классов с таблицей классов на основе идентификатора класса.
SELECT student.Name, class.ClassName
FROM student
inner join class_registration
ON student.id = class_registration.StudentId
inner join class
ON class.classid = class_registration.ClassId
;