SQL — получить все варианты выбора учащегося

Предыстория такова, что ученики могут выбирать разные классы, устанавливать вес и выбирать учителя (на выбор А, В, С, D) для класса, в одном классе четыре учителя.

Таблицы как ниже

class:
id          integer
name        string
description string
student:
id   integer
name string
student_choice:
id         integer
class_id   integer
student_id integer
weight     decimal
choice     string
teacher:
id           integer
class_id     integer
choice       string
teacher_desc string

То, что я пытаюсь сделать, это получить все варианты выбора учащегося по его / ее идентификатору, результат выглядит так

ID классаимя_классамассавыборучитель_описание
1Математика0,2ААлиса
3Музыка0,5ББоб
4Физический0,3ААлан

в настоящее время я просто использую таблицу student_choice, чтобы найти все классы, которые выбирает ученик, и найти учителя, соответствующего выбору ученика

student.id --> student_choice --> class.id
class.id + student_choice.choice --> teacher

Я не знаю, возможно ли реализовать это с помощью всего одного SQL-запроса, поэтому я просто использую несколько запросов и обрабатываю их в своем приложении.

Может ли кто-нибудь сказать мне, что я должен сделать, чтобы достичь своей цели только с одним SQL-запросом, или просто сохранить текущую ситуацию, потому что обработка их в моем приложении, а не в базе данных, может быть более эффективной?

Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
0
0
28
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я мог бы что-то упустить, но кажется, что простое соединение между всеми таблицами может достичь этого.

Что-то подобное:

select sc.class_id, c.name, sc.weight, sc.choice, t.teacher_desc 
from student_choice sc, class c, teacher t
where sc.class_id = c.id
and sc.class_id = t.class_id and sc.choice = t.choice
and sc.student_id = {YOUR_STUDENT_ID}

Или, если вы предпочитаете синтаксис inner join:

select sc.class_id, c.name, sc.weight, sc.choice, t.teacher_desc
from student_choice sc
inner join class c on sc.class_id = c.id
inner join teacher t on sc.class_id = t.class_id and sc.choice = t.choice
where sc.student_id = {YOUR_STUDENT_ID}

Другие вопросы по теме