【问题标题】:A stored procedure to select from three tables从三个表中选择的存储过程
【发布时间】:2012-12-12 18:48:22
【问题描述】:

我有这三张桌子

课程

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] 列值

AND检查学生当前课程的开始和结束时间,并仅返回学生有空(没有课程)的课程

我的选择语句只返回学生未注册的课程::

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

如何编辑此语句以包含可用时间条件(知道我想将其放入存储过程中)......

【问题讨论】:

    标签: sql sql-server stored-procedures


    【解决方案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 中。 view 可能是合理的。

    阅读更多关于views here的信息。

    【讨论】:

    • 请注意,BETWEEN 包括边界。目前尚不清楚这是否是您所希望的。如果不是简单地用(starttime > ... and starttime < ...) or end time ...重写
    • 它给了我以下错误:数据类型日期和时间在小于或等于运算符中不兼容。
    • 您的列是什么数据类型?这也没有意义。该错误表明,将不同的数据类型相互比较。但是这里将一种数据类型与自身进行比较,它是同一张表。如果您使用 google sql server 和您的错误消息,则没有结果。所以要么你给我们的信息有误,要么不够。
    • [课程开始时间]、[课程开始时间]都是time(7)类型。该错误表明您无法在小于或等于运算符的情况下比较时间或键入日期。
    • 执行这个查询:select top 1 * from whateverTable where '01:00:00' < '02:00:00',就会有结果。把<改成>就没有结果了。如果这不起作用,则说明您的 RDBMS 存在严重问题,无论您使用的是哪个,而 SQL Server 则不确定。原因是在绝对可能的情况下比较时间,并且不需要任何功能。
    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    相关资源
    最近更新 更多