sql - 确定学生是否有资格参加具有先决条件的课程的存储过程
问题描述
我有一个我正在研究的课程注册系统的存储过程。如果查询返回学生未根据课程先决条件学习的课程,我的意图是返回值 -1。
pre req 表只有两列;CourseID
是该课程并且PreReqCourse_ID
是该指定课程的必修课程。如果学生已修完所有 pre req 课程,那么它应该返回值 1。即使我为已修读所需 pre req 课程的学生运行查询,我仍然会得到 -1 的值。任何帮助将非常感激!
CREATE PROCEDURE CheckPreReq
@StudentID INT,
@CourseID INT
AS
DECLARE @theCount INT
IF EXISTS (SELECT *
FROM PreReq
INNER JOIN Student_History ON (PreReq.Course_ID = @CourseID)
WHERE Student_History.Course_ID != PreReq.PreReqCourse_ID
AND Student_History.Student_ID = @StudentID)
BEGIN
SET @theCount =-1
END
ELSE
BEGIN
SET @theCount = 1
END
RETURN @theCount
解决方案
像这样的东西会起作用吗?
DECLARE @PreReqsTotal tinyint
DECLARE @PreReqsFulfilled tinyint
-- Count pre-req courses.
SELECT @PreReqsTotal = COUNT(*)
FROM PreReq
WHERE [CourseID] = @CourseId
-- Count how many fulfilled by student.
SELECT @PreReqsFulfilled = count(*)
FROM Student_History hist
JOIN PreReq pre
on hist.Course_ID = pre.PreReqCourse_ID
WHERE pre.CourseID = @CourseID
and hist.Student_ID = @StudentID
RETURN CASE WHEN @PreReqsTotal = @PreReqsFulfilled THEN 1 ELSE -1 END
...或类似的东西:
IF EXISTS
(
SELECT blah.*
FROM
(
SELECT pre.*
,[PreFulfilled] = CASE WHEN hist.Course_ID is null THEN 0 ELSE 1 END
FROM PreReq pre
LEFT JOIN
Student_History hist
on pre.PreReqCourse_ID = hist.Course_ID
and hist.Student_ID = @StudentID
WHERE pre.CourseID = @CourseID
) blah
WHERE blah.[PreFulfilled] = 0 -- Unfulfilled PreReq.
)
BEGIN
RETURN -1 -- Has an unfulfilled PreReq.
END
RETURN 1 -- No unfulfilled PreReqs.
推荐阅读
- java - 以下java代码线程安全没有volatile吗?
- c++ - 是否可以在 gnu 闪电中进行持续的“阻止”?
- javascript - 如何使加载屏幕运行直到所有图像都加载完毕?
- mongodb - MongoDb 查询 - 基于分组和过滤结果
- html - 通过将鼠标悬停在 div 上开始视频
- javascript - 避免简单输出的分页限制 - Shopify / Liquid
- python - 如何在熊猫中格式化不同的值?
- sql - 我们可以在两个不同的查询中应用案例吗?
- typescript - TypeScript union type allowing values outside of type
- android - Android Studio 中的 Firebase 手机身份验证错误