Mysql - ВЫБЕРИТЕ столбец 'A' ​​даже с NULL - PullRequest
0 голосов
/ 21 сентября 2018

Таблица A содержит имена учеников, таблица B и C - классы и присутствие учеников.Я хотел бы показать всех студентов и присутствовать на них.Проблема в том, что я не могу отобразить всех студентов, у которых не было проверенного присутствия.Там, где я проверял присутствие учеников, это нормально, но если в заданном классе, в данный день и по заданному предмету нет проверенного присутствия, ничего не отображается.

Мой запрос:

SELECT student.id_student, CONCAT(student.name,' ' ,student.surname) as 'name_surname',pres_student_present, pres_student_absent, pres_student_justified, pres_student_late, pres_student_rel, pres_student_course, pres_student_delegation, pres_student_note FROM student
    LEFT JOIN class ON student.no_classes = class.no_classes
    LEFT JOIN pres_student ON student.id_student = pres_student.id_student
    WHERE (class.no_classes = '$class' OR NULL AND pres_student_data = '$data' AND pres_student_id_subject = $id_subject OR NULL)
    GROUP BY student.surname
    ORDER BY student.surname ASC

Я хочу, чтобы имя name_surname всегда отображалось, и любой другой столбец должен иметь значение NULL или 1, например: Name | present | absent | just | late | rel | delegation | note | Donald Trump | 1 | | | | | | | Bush | | | | | | | | Someone | 1 | | | | | | | и т. Д. *

1 Ответ

0 голосов
/ 21 сентября 2018

Вы должны перенести ограничения для таблиц class и pres_student из условия WHERE в ON (LEFT соединение).

В вашем случае, когда вы выполняете ограничение в WHERE предложение в таблице с outer join, механизм sql считает, что вы выполняете INNER join

SELECT    student.id_student
        , CONCAT(student.name, ' ', student.surname) AS 'name_surname'
        , pres_student_present
        , pres_student_absent
        , pres_student_justified
        , pres_student_late
        , pres_student_rel
        , pres_student_course
        , pres_student_delegation
        , pres_student_note
FROM      student
LEFT JOIN class
       ON student.no_classes = class.no_classes
      AND class.no_classes   = '$class'
LEFT JOIN pres_student
       ON student.id_student      = pres_student.id_student
      AND pres_student_data       = '$data'
      AND pres_student_id_subject = $id_subject
GROUP     BY student.surname
ORDER     BY student.surname ASC 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...