MySQL: как пройти по 3 разным таблицам, ссылаясь на разные столбцы в каждой таблице, но используя первичные ключи - PullRequest
0 голосов
/ 08 декабря 2018

Я пытаюсь выяснить, в каких школах есть ученики, которые не сдали экзамены в 2018 году. Итак, у меня есть 3 таблицы: ExamInfo, ExamEntry и Students.Я собираюсь попытаться использовать таблицу ExamInfo для получения информации из таблицы Students, хотя, очевидно, мне нужна только информация о студентах, которые не завершили свой экзамен в 2018 году. Примечание: я ищу студентов, которые посещали,хотя этот экзамен не был завершен, с этим конкретным экзаменом вы можете посмотреть на завершенный экзамен как на пройденный экзамен.

В пределах ExamInfo У меня есть столбцы:

ExamInfo_Date --when exam took place, using to get year() condition
ExamInfo_ExamNo --unique student exam ID used to connect with other tables
ExamInfo_Completed --1 if completed, 0 if not.
...

В пределах ExamEntry Iу меня есть соответствующие столбцы:

ExamEntry_ExamNo --connected to ExamInfo table
ExamEntry_StudentId --unique studentId used to connect to Students table
ExamEntry_Date -- this is same as ExamInfo_Date if any relevance.
...

В пределах Students У меня есть следующие столбцы:

Students_Id --this is related to ExamEntry_StudentId, PRIMARY KEY
Students_School --this is the school of which I wish to be my output.
...

Я хочу, чтобы мой вывод был просто списком всех школ, в которых были учащиеся, которые несдать экзамены в 2018 году. Хотя моя проблема заключается в том, чтобы найти из таблицы ExamInfo поиск школ, в которых учащиеся не сдали экзамен.

Пока у меня есть:

SELECT a.Students_School, YEAR(l.ExamInfo_Date), l.ExamInfo_Completed
FROM ExamInfo l ??JOIN?? Students a
WHERE YEAR(l.ExamInfo_Date) = 2018
AND l.ExamInfo_Completed = 0
;

Я даже не уверен, нужно ли проходить таблицу ExamEntry.Я уверен, что должен использовать соединение, хотя и не уверен, как его правильно использовать.Кроме того, с моими 3 различными столбцами SELECT, я хочу, чтобы выводился только столбец Students_School:

Students_School
---------------
Applederry
Barnet Boys
...

1 Ответ

0 голосов
/ 08 декабря 2018

Очевидно, вам нужно JOIN - два на самом деле.Ваша таблица содержит экзаменов , студентов и таблицу соединений / ассоциаций, которая представляет отношение «многие ко многим» между этими объектами.

Итак, я ожидаюFROM предложение выглядит так:

FROM ExamInfo e JOIN
     ExamEntry ee
     ON ee.ExamEntry_ExamNo = e.ExamNo JOIN
     Students s
     ON ee.ExamEntry_StudentId = s.Students_Id
...