如何选择多对多关系中的行?(SQL)
我有一张学生桌和一张课程桌。 它们之间存在多对多关系,而StudentCourses表是中介。 现在,我有一个课程ID列表,并希望选择遵循列表中所有课程的学生。 怎么做 在本例中,我只希望结果是John和Jane,因为他们在我的课程列表中都有这两门课程。 我不要唐纳德,因为他只有一个 我曾经尝试过这种连接、构造,但它并没有消除只有我想要的一些课程的学生如何选择多对多关系中的行?(SQL),sql,join,many-to-many,Sql,Join,Many To Many,我有一张学生桌和一张课程桌。 它们之间存在多对多关系,而StudentCourses表是中介。 现在,我有一个课程ID列表,并希望选择遵循列表中所有课程的学生。 怎么做 在本例中,我只希望结果是John和Jane,因为他们在我的课程列表中都有这两门课程。 我不要唐纳德,因为他只有一个 我曾经尝试过这种连接、构造,但它并没有消除只有我想要的一些课程的学生 SELECT * FROM @CourseList CRL INNER JOIN #Courses CRS ON
SELECT
*
FROM
@CourseList CRL
INNER JOIN #Courses CRS ON CRS.ID = CRL.CourseID
INNER JOIN #StudentCourses STC ON STC.CourseID = CRS.ID
INNER JOIN #Students STD ON STD.ID = STC.StudentID
如果您想让学生学习所有必修课程,可以使用聚合和
having
:
SELECT sc.StudentId
FROM #StudentCourses sc JOIN
@CourseList cl
ON sc.CourseID = cl.id
GROUP BY sc.StudentId
HAVING COUNT(DISTINCT sc.CourseId) = (SELECT COUNT(*) FROM @DcourseList);
如果需要有关学生的其他信息,可以加入students
表(或使用中的或类似结构)
请注意,这只需要StudentCourses
表。它有匹配的ID。无需加入参考表。如果您想让学生学习所有必修课程,您可以使用聚合和have
:
SELECT sc.StudentId
FROM #StudentCourses sc JOIN
@CourseList cl
ON sc.CourseID = cl.id
GROUP BY sc.StudentId
HAVING COUNT(DISTINCT sc.CourseId) = (SELECT COUNT(*) FROM @DcourseList);
如果需要有关学生的其他信息,可以加入students
表(或使用中的或类似结构)
请注意,这只需要StudentCourses
表。它有匹配的ID。无需加入参考表。加入。使用WHERE子句仅选择所需的课程ID。使其更容易并尽可能帮助您:。您可以链接JOIN
s以使用多个链接表,而无需知道查询的约束条件。表的含义——行在表中以列值表示的含义——是必要和充分的。PS“与所有人相关”或“与每个人相关”涉及“关系划分”。PS你有一个典型的歧义——如果没有课,你想要所有的学生还是一个都不要?PS在给出业务关系(ship)/关联或表(基本或查询结果)时,请说明其中的一行根据其列值对业务状况的说明。这是常见问题解答。在考虑发帖之前,请始终用谷歌搜索你的错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,有/没有你的特定字符串/名称和网站:stackoverflow.com和标签,并阅读许多答案。如果你发布一个问题,用一句话作为标题。查看文本上方的投票箭头鼠标(&T)。进行连接。使用WHERE子句仅选择所需的课程ID。使其更容易并尽可能帮助您:。您可以链接JOIN
s以使用多个链接表,而无需知道查询的约束条件。表的含义——行在表中以列值表示的含义——是必要和充分的。PS“与所有人相关”或“与每个人相关”涉及“关系划分”。PS你有一个典型的歧义——如果没有课,你想要所有的学生还是一个都不要?PS在给出业务关系(ship)/关联或表(基本或查询结果)时,请说明其中的一行根据其列值对业务状况的说明。这是常见问题解答。在考虑发帖之前,请始终用谷歌搜索你的错误消息或你的问题/问题/目标的许多清晰、简洁和准确的措辞,有/没有你的特定字符串/名称和网站:stackoverflow.com和标签,并阅读许多答案。如果你发布一个问题,用一句话作为标题。请参见文本上方的投票箭头(&S)。