繁体   English   中英

如何在SQL Server中查询多对多关系

[英]How to query for many to many relationship in Sql Server

这是我的桌子 在此处输入图片说明

我的问题是如何获取特定学生ID的课程名称

我试过了但是没用

select Course.CourseName from Course
where Course.CourseId in (

select Student.studentname ,StudentCourse.CourseId from Student inner join StudentCourse
on Student.StudentId = StudentCourse.StudentId
  where Student.StudentId = 1)

您可能会忘记我的查询,因为我是SQL Server的新手,只要告诉我开发人员在SQL Server真实世界中究竟做了什么,以获取特定学生的课程名称

如您所说,您想知道这种方法,这只是基本观点

1)我们想看看CourseName。

SELECT CourseName FROM Course

2)一个学生可能有多个课程。 3)因此,我们还有一个表StudentCourse可以实现这一目标。 4)我们必须在此表中查找CourseName的ID

SELECT CourseID FROM StudentCourse

5)查找哪个学生(X是您想要的数字)参加这些课程。

WHERE StudentID = X

6)如果我们将它们放在一起看,我们现在可以通过步骤1获得所有的CourseName。但是,我们不需要所有的CourseName,而拥有所有X编号的学生需要的CourseID。 因此,如果我们将它们组合在一起,现在我们只需选择X接受的CourseName。

WHERE CourseID IN

7)所以我们的最终结果是

SELECT CourseName FROM Course WHERE CourseID IN 
(SELECT CourseID FROM StudentCourse WHERE StudentID = X)

选中 一项,以查看其工作方式。

我正在使用左联接,以防万一您的学生没有分配任何课程,否则,如果使用内联接,您将不会获得任何结果;

SELECT
s.StudentID
,s.StudentNam
,sc.CourseID
,c.CourseName
FROM Student s
LEFT JOIN StudentCourse sc
ON s.StudentID = sc.StudentID
LEFT JOIN Course c
ON sc.CourseID = c.CourseID
WHERE s.StudentID = 1

尝试这个:

select CourseName from Course
where CourseId in 
(select CourseId from StudentCourse
where StudentId = 1)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM