我将首先使用使用 JOIN 条件的当前 SQL 语法而不是使用 WHERE 子句来显示表之间的关系。这样,您就可以完成所有表格关联,并且可以更好地直观地确认您已配置这些元素......然后,添加您正在寻找的标准。
我在这里所做的只是有一个 PreQuery(结果别名“JaciClassesInBG”),它获取所有注册的 Jaci 课程,并且只有那些用于建筑物“BG”的课程(已添加到位置表的 JOIN 子句中) . WHERE 子句仅适用于 Jaci。
根据这个结果,我列出了 Jaci 上过的所有课程。我抓住了她的 ID、S_Level 和 C_SE_ID 条目。
从那以后,只需根据 Jaci 所采用的 C_SE_ID 显式加入所有其他学生的注册表(因此所有学生都在同一个班级)。但是,我已经从列表中排除(通过而不是......)Jaci 的学生证......我们知道她参加了课程,我们正在寻找其他人。
最后,根据共同注册将该结果连接回学生表。现在,我们可以将 Jaci 的常见“S_LEVEL”标准与这些学生联系起来……
现在,你可以得到任何你想要展示的细节......在这种情况下,我正在抓住每个学生,以及他们与 Jaci 共同上的班级。一名学生可能上过多个班级。这将显示每个。如果您只关心一个实例,我会将顶部更改为...
选择 DISTINCT S2.S_FName, S2.S_LName...
SELECT
JaciClassesInBG.Course_Code,
JaciClassesInBG.Course_Name,
S2.S_FName,
S2.S_LName
from
( SELECT
S.ID,
S.S_Level,
CS.C_SE_ID,
C.Course_Code,
C.Course_Name
FROM
Student S
JOIN Enrollment E
ON S.S_id = E.S_id
JOIN CourseSection CS
ON E.C_SE_ID = CS.C_SE_id
JOIN Location L
ON L.Loc_id = CS.Loc_ID
AND L.Blodg_Code = "BG"
JOIN Course C
ON CS.Course_ID = C.Course_ID
WHERE
S.S_Fname = "Jaci"
AND S.S_Lname = "Walker" ) JaciClassesInBG
JOIN
Enrollment E2
ON JaciClassesInBG.C_SE_ID = E2.C_SE_ID
AND NOT JaciClassesInBG.S_ID = E2.S_ID
JOIN Students S2
ON E2.S_ID = S2.S_ID
AND JaciClassesInBG.S_Level = S2.S_Level