0

我有这三张桌子

培训班

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

学生课程

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

学生

student ID     student name
1              AAAA
2              BBBB

我需要一个 select 语句放置在存储过程中,以仅返回学生未注册(已实现)的课程的 [Course ID]、[Course name] 列值

检查学生当前课程的开始和结束时间,只返回学生可用的课程(没有课程)

我的选择声明只返回学生未注册的课程::

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 回答