У меня есть база данных с 3 таблицами: students
, courses
и mistakes
.У меня есть одна соединительная таблица (csm
), где я соединяю 3 таблицы.Я предполагаю, что ошибки одинаковы для каждого курса.
Столовые курсы
+----------+---------------+
| crs_id | crs_name |
+----------+---------------+
| 1 | HTML |
| 2 | PHP |
| 3 | Python |
+----------+---------------+
Стол студентов
+----------+---------------+---------------+
| stu_id | stu_firstname | stu_lastname |
+----------+---------------+---------------+
| 1 | Tina | Turner |
| 2 | Lisa | Laroi |
| 3 | Dina | Donna |
| 3 | Jim | Leduc |
+----------+---------------+---------------+
Ошибки таблицы
+----------+---------------+------------+
| mis_id | mis_name | mis_weight |
+----------+---------------+------------+
| 1 | No camelCase | 7 |
| 2 | No brackets | 10 |
| 3 | Operator mist.| 12 |
+----------+---------------+------------+
Присоединение к столу CSM
+----------+------------+------------+------------+
| csm_id | fk_crs_id | fk_stu_id | fk_mis_id |
+----------+------------+------------+------------+
| 1 | 1 | 1 | 1 |
| 2 | 1 | 1 | 3 |
| 3 | 2 | 3 | 1 |
| 4 | 3 | 2 | 2 |
| 5 | 3 | 2 | 1 |
| 6 | 3 | 3 | 1 |
+----------+------------+------------+------------+
Если я выберу конкретный курс, я хочу получить список ВСЕХ студентов с минусом баллов за этот курс.Поэтому я также хочу получить студентов без результата в таблице присоединения CSM.
Ближайший результат, который я получил, с помощью следующего выражения SQL:
select stu_firsname, stu_lastname, csm.*, sum(mis_weight)
from students s
left join crs_stu_mis csm on s.stu_id = csm.fk_stu_id
left join mistakes m on csm.fk_mis_id = m.mis_id
where fk_crs_id = 4 or fk_crs_id is null
group by stu_firstname;
С этим я получаю суммуошибок для определенного курса, а также студентов, у которых нет записей в таблице CSM, но некоторые результаты отсутствуют.Например, это не показывает студентов, у которых есть записи в таблице CSM, но не для запрошенного курса.
Как получить этих студентов в моей таблице результатов?