我正在创建一个在线考勤系统,我的问题是在下面的查询中没有带回正确的数据。
我希望带回一个学生证,班级ID和出勤状态E.G现在迟到或缺席该班。
如果已经参加,则查询运行正常。但是,如果未进行出席,则查询返回空集。
我希望仍然可以返回所有数据,但有' null'或者“出勤状态”中的任何内容专栏,如果没有参加。
如果已经参加了课程,它会带回这些结果:
但是,如果没有参加,那么它只会返回一个空集。我希望在出席专栏中打印出来的' null'或确保某些数据仍然存在的任何内容。
至少我还需要班级和学生证。我认为它可能需要 JOIN ,我无法理解它。
答案 0 :(得分:1)
你应该使用正确的JOINS语法!这可能会导致很多问题而且很难理解。
你需要的是一个LEFT JOIN,它可以在你想要加入的表的条件之后使用(+)来使用 - 不要这样做。
您的查询应该是:
SELECT class.class_id as 'Class_ID',
student.Student_ID as 'Student_ID',
case when attendence.attendence_status is null then 'Not Present' else attendence.attendence_status end as 'attendence_status'
FROM Student
INNER JOIN Student_Has_Class ON(student_has_class.student_id = student.student_id)
INNER JOIN class ON(class.class_id = student_has_class.class_id)
INNER JOIN Subject ON(class.subject_id = subject.subject_id)
LEFT JOIN Attendence on(attendence.class_id = class.class_ID
AND attendence.student_id = student.student_id)
WHERE NOW() between class.class_start_timestamp and class.class_end_timestamp
AND Student.student_id like '1'