Прежде всего, вам не нужна таблица questionnaire
, чтобы получить questionnaireID
- questionnaireQuestions
, содержащую ее, и она может быть напрямую связана с studentAnswer
. Во-вторых, вам не нужна таблица students
, чтобы получить studentID
, потому что studentAnswer
содержит ее. Таким образом, вы можете просто следовать этой логике c:
- , вы можете получить
questionnaireID
из questionnaireQuestions
- , вы можете связать
questionnaireQuestions
с studentAnswer
через questionID
чтобы получить answer
и studentID
Это приводит нас к простому объединению двух таблиц:
SELECT sa.studentID, qq.questionnaireID, sa.answer
FROM studentAnswer sa
INNER JOIN questionnaireQuestions qq
ON qq.questionID = sa.questionID
Суть в том, чтобы всегда искать кратчайший маршрут для извлечения ваши данные. Не включайте никаких дополнительных таблиц, если этого можно избежать. Здесь ваша диаграмма пригодится. Глядя на это, вы можете видеть, что questionnaireQuestions
«ближе» (на шаг меньше для подключения) к studentAnswer
, чем questionnaire
. Так как он содержит данные, которые вам нужны, логично использовать их над questionnaire
.
Теперь предположим, что вам нужно questionnaireName
вместе с firstName
и lastName
ученика. Даже если вы не можете напрямую присоединиться questionnaire
к student
, вы можете сделать это через questionnaireQuestions
и studentAnswers
. Объединения могут содержать таблицы, из которых вы не выбираете - это механизм соединения данных. Тогда вы будете следовать этой логике c:
- , вы можете получить
questionnaireName
от questionnaire
- , вы можете связать
questionnaire
с questionnaireQuestions
через questionnaireID
- Вы можете связать
questionnaireQuestions
с studentAnswer
через questionID
- Вы можете связать
studentAnswer
с student
через studentID
Это приводит нас к такому запросу:
SELECT q.questionnaireName, s.firstName, s.lastName
FROM questionnaire q
INNER JOIN questionnaireQuestions qq ON qq.questionnaireID = q.questionnaireID
INNER JOIN studentAnswer sa ON qq.questionID = sa.questionID
INNER JOIN student s ON s.studentID = sa.studentID