假设我有一个名为 Catalog 的表,如下所示:
Course Number CourseName CourseDsc PreReq
1028 CS146 Data S... 1005
1028 CS146 Data S... 2000
1028 CS146 Data S... 2003
还有另一个名为 PreviousCourses 的表,如下所示:
Username PrevCoursesID Grade
admin 1005 A
admin 2000 A
现在,该用户管理员不满足类(class) CS146 的先决条件,因为他具有三个先决条件中的两个(1005 和 2000),但缺少先决条件 2003。我的查询设置方式是它检查 PreviousCourses 是否是 Catalog 的子集。基本上,如果满足特定类(class)的任何先决条件,则允许用户注册该类(class)。我希望我的查询的行为是,只有满足特定类(class)目录中的所有先决条件,用户才能注册。 我的查询尝试:
"Select PrevCoursesID, Grade from PreviousCourses where "
+ "Grade <= 'D' AND "
+ "PrevCoursesID IN (Select PreReq from Catalog where CourseNumber = '" + courseID + "') AND"
+ " Username = '" + currentUser + "'";
更新:刚刚尝试了此查询,但似乎不起作用
SELECT CATALOG.prereq, previouscourses.grade
FROM CATALOG LEFT JOIN PREVIOUSCOURSES ON
CATALOG.prereq=PREVIOUSCOURSES.PREVCOURSESID AND
PREVIOUSCOURSES.GRADE<='D' WHERE PREVIOUSCOURSES.USERNAME='ADMIN'
AND CATALOG.COURSENUMBER='1028'
最佳答案
这些是用户可以参加的类(class):
DECLARE @UserName varchar(255) = 'admin'
SELECT c.[Course Number]
FROM Catalog c
GROUP BY c.[Course Number]
HAVING COUNT(1) = (SELECT COUNT(DISTINCT pc.PreReq)
FROM PreviousCourses pc
WHERE pc.Username = @UserName
AND c.PreReq = pc.PrevCoursesID
AND pc.Grade IN ('A', 'B', 'C', 'P', 'Pass')
OR MAX(ISNULL(c.PreReq, 0)) = 0
ORDER BY c.[Course Number]
(这是 SQL Server)
关于mysql - SQL 检查两个表是否具有特定 ID 的相同数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34146478/