Идея состоит в том, что мне нужно перечислить всех учеников, которые никогда не подводили вообще, и это включает учеников, которые еще не сдавали экзамены вообще.Несколько пунктов:
studentId
- уникальный идентификатор студента.
studentLastname
очевидно, фамилия студента.
examEntryStudentId
- внешний ключ уникального идентификатора студента.
examEntryNumber
-уникальный номер экзамена для студентов.
examInfoNumber
такой же, но в таблице ExamInfo
.
examInfoPassed
определяет, сдали ли ученики или нет, 1 означает, что они сдали (более 50%), и 0 означает, что они сдали.
Идея в том, что я пересекаю таблицы с Student
до ExamEntry
до ExamInfo
.Я хочу, чтобы сначала были выбраны все студенты, поскольку те, кто младше, еще не сдали официальный экзамен, поэтому я использую LEFT JOIN
, чтобы все были выбраны, поскольку в противном случае они не будут отображаться так, как онине содержатся в пределах examEntryStudentId
, так как не все студенты сдали экзамены.Кроме того, вы затем используете таблицу ExamEntry
, чтобы перейти к таблице ExamInfo
, где хранятся данные о том, провалил ли студент экзамен.Эти данные хранятся в examInfoPassed
, поэтому, если у ученика когда-либо было значение 0
в examInfoPassed
, это означает, что они должны быть единственными учениками, не включенными в мой вывод.
Это мойисходный код:
SELECT DISTINCT l.studentId, l.studentLastname
FROM Students l
LEFT JOIN ExamEntry e
ON l.studentId = e.examEntryStudentId
JOIN ExamInfo a
ON e.examEntryNumber = a.examInfoNumber
WHERE NOT a.examInfoPassed = 0
;
Несмотря на то, что мои выводы в настоящее время относятся к любому учащемуся, который сдал тест, включая студентов, которые ранее не прошли тест.Я не уверен, как сделать условие, которое означает, что если вы попадете в категорию NOT a.examInfoPassed = 0
, то они будут удалены из вывода.Также студенты, которые не проходили никаких тестов, также не включены в мои результаты.