0

次の問題があります。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です

現在は機能していますが、同じ日付の他のコースに割り当てられている学生は削除されません。02-03 から 02-08 までのコース 3 で利用可能な学生を取得しようとしています。学生 2 はコースに参加しています。 3 は表示されていません。学生 1 は、01-03 に始まり 03-01 に終わるコース 2 にいるため、利用できないはずです。

どんな助けでも大歓迎です。

4

1 に答える 1