0

私はこれらの3つのテーブルを持っています

コース

course ID     course Name     course start time   course end time
1             Math            10:00:00            11:00:00
2             Science         11:00:00            12:00:00
3             geography       09:00:00            10:00:00

student_courses

course ID     student ID      Final cost
1             2               100
2             3               200

学生

student ID     student name
1              AAAA
2              BBBB

学生が登録されていない(達成された)コースの[コースID]、[コース名]列の値のみを返すようにストアドプロシージャに配置するselectステートメントが必要です

そして、学生の現在のコースの開始時刻と終了時刻を確認し、学生が利用できる時間(クラスがない)のコースのみを返します。

学生が登録されていないコースのみを返す私のselectステートメント::

SELECT [Course ID], [Course name] 
FROM Courses
WHERE [Course ID] NOT IN 
 (SELECT Course ID from student_courses WHERE [student ID]=1) 

このステートメントを編集して、使用可能な時間条件を含めるにはどうすればよいですか(ストアドプロシージャに入れたいことを知っています)。

4

1 に答える 1

1

これはあなたが必要とするクエリです:

SELECT [Course ID], [Course name] 
FROM Courses 
WHERE [Course ID] NOT IN 
 (SELECT Course ID from student_courses sc
  INNER JOIN Courses c ON sc.[course ID] = c.[course ID] 
  WHERE [student ID] = 1
  AND (c.[course start time] BETWEEN Courses.[course start time] AND Courses.[course end time]
  OR c.[course end time] BETWEEN Courses.[course start time] AND Courses.[course end time]))

理由はわかりません。なぜこれがにあるべきなのかstored procedure。Aviewは合理的かもしれません。

詳細については、viewsこちらをご覧ください。

于 2012-12-12T10:48:22.727 に答える