2012-07-27 39 views
0
SELECT 
    Student.id, 
    Student.first_name, 
    Student.last_name, 
    count(`Attendance`.`id`) as total 
FROM `karate`.`attendances` AS `Attendance` 
RIGHT JOIN `karate`.`students` AS `Student` ON (`Attendance`.`student_id` = `Student`.`id`) 
WHERE 1 
    AND `Attendance`.`attendance_date` BETWEEN '2012-07-01' AND '2012-07-31' 
    AND (Student.active = '1') 
    AND (Student.type = 'student') 
GROUP BY `Student`.`id` 
ORDER BY total ASC 

我希望所有的学生记录中在指定的日期范围内有出勤总人数,但它只显示那些有出勤率的学生的两个记录。 但是 如果我们删除日期检查条件它工作正常。正确加入不起作用

在此先感谢

回答

0

这是因为attendance_date的行,这是正确的,加入了NULL值。您需要包括这种情况下,您的条件:

WHERE 1 
    AND (`Attendance`.`attendance_date` IS NULL 
     OR `Attendance`.`attendance_date` BETWEEN '2012-07-01' AND '2012-07-31') 
    AND (Student.active = '1') 
    AND (Student.type = 'student') 
+0

遗憾地说,但这不能正常工作,仍显示出只参加学生(?: – 2012-07-27 08:39:54

+0

您可以发布更新的查询在你原来的问题 – 2012-07-27 08:44:10

+0

SELECT Student.id,学生(出勤)''''''作为总数从'karate'.'students'作为'学生'RIGHT JOIN'karate'.'attendances'作为'考勤'ON('考勤'。 'student_id' ='Student'.'id')WHERE 1 AND(('Attendance'.'attendance_date' is NULL or'Attendance'.'attendance_date' BETWEEN'2012-07-01'AND'2012-07-31') AND(Student.active ='1')AND(Student.type ='student')GROUP BY'Student'.'id' ORDER BY total ASC – 2012-07-27 08:46:42