我有以下问题,我有 3 个表,第一个称为我有的课程
courses| id | start | end |
--------------------------------------
1 2012-10-12 | 2012-11-12 |
students| id | available_start | available_end |
-------------------------------------------------
1 2012-10-13 2012-11-11
2 2012-11-06 2012-11-08
students_to_courses | student_id | course_id |
-------------------------------------------------
1 1
所以我试图找出哪些学生可以参加课程。因此,如果学生被添加到 student_to_courses 并且日期在课程日期之间,我不需要它。我觉得查询应该带有子查询,但我真的不明白。我的查询现在看起来像这样,但不能正常工作。
SELECT s.id
FROM (`students` s)
LEFT JOIN `student_to_course` s2c ON `s2c`.`student_id` = `s`.`id`
LEFT JOIN `courses` assigned_2_course ON `s2c`.`course_id` = `assigned_2_course`.`id`
LEFT JOIN `courses` c ON `c`.`id` = 1
WHERE
(
(s.available_start NOT BETWEEN assigned_2_course.start AND assigned_2_course.end
AND
s.aviailable_end NOT BETWEEN assigned_2_course.start AND assigned_2_course.end
) OR assigned_2_course.end IS NULL)
AND
`s`.`available_start` BETWEEN c.start AND c.end
AND `s`.`available_end` <= c.end
GROUP BY `s`.`id`
ORDER BY `s`.`id` desc
这是http://sqlfiddle.com/#!2/49c11/1
现在可以工作,但不会删除在其他课程中分配的具有相同日期的学生你怎么看3 所以没有显示,学生 1 在课程 2 中,从 01-03 开始,到 03-01 结束,所以不应该有空。
任何帮助将不胜感激。