检查表2中是否在多个值中定义了表1中的多个值

时间:2017-11-15 09:48:29

标签: sql database subquery

有两个表: CourseModules 学生

学生可以参加不同的模块。如果学生继承该模块,它将存储在带有moduleID的StudentsModule下的数据库中。

表courseModules定义了学生获取证书所需的所有模块。

我需要概述所有持有证书的学生。

在示例中,您可以看到唯一拥有证书的学生是学生ID:111221

我完全坚持这个。它需要在一个查询中完成,而不是多个,不使用循环。

Database diagram overview

我尝试了以下内容:

SELECT StudentID, ModuleID<br>
FROM StudentsModule<br>
WHERE ModuleID ALL (
    SELECT OnderdeelID
    FROM CourseModules 
    GROUP BY groupID
)

但我被卡住了。

1 个答案:

答案 0 :(得分:1)

试试这个

select s.studentId, s.moduleId, cc.courseCount, cd.courseDone
from StudentsModule s
join CourseModulec on s.moduleId = c.moduleId
join (select count(*) as courseCount, groupId from CourseModule group by groupId) as cc on cc.groupId = c.groupId
join (select count(*) as courseDone, studentId from StudentsModule s1 join CourseModule c1 on s1.moduleId = c1.moduleId group by s1.studentId) as cd on cd.studentId = s.studentId
where cc.courseCount = cd.courseDone