我正在创建一个在线考勤系统,我的问题是下面的一个查询没有带回正确的数据。
我想要拿回一张学生证,一张班级ID,以及那个班迟到或缺课的情况。
如果接受了考勤,那么查询就可以运行了。但是,如果没有考勤,查询将返回一个空集。
我仍然期待返回所有的数据,但有'null‘或任何在’出勤状态‘栏,如果出席还没有采取。
这是查询:

如果这门课的出勤率被录取了,它还会带回这些结果:

然而,,如果没有出席,那么它只会返回一个空集。我想要的是在考勤栏中打印'null‘或任何东西,以确保某些数据仍然返回。。
至少我还需要这个类和学生的ID,我想它可能需要一个连接,我就是无法理解它。
发布于 2016-02-08 08:57:29
您应该使用适当的联接语法!这会造成很多问题,而且很难理解。
您需要的是一个左连接,它可以在要左联接的表的条件之后使用(+)--不要这样做。
您的查询应该是:
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'https://stackoverflow.com/questions/35265419
复制相似问题