带三个表的sql select子句

57hvy0tb  于 2021-07-24  发布在  Java
关注(0)|答案(2)|浏览(350)

我正在尝试编写一个sql查询来显示每门课程的学生列表。下图显示了数据库关系。
我编写的sql查询是:

select * from Courses 
inner join Enrollments on Enrollments.CourseId = Courses.CourseId
inner join Student on Enrollments.StudentId = StudentId
where Courses.CourseId = 1


问题是,我得到的数据比我预期的要多,因为只有一个学生注册了这门课程,但我得到了10个条目。我不确定我是否做了一些根本错误的事情,或者我的质疑是问题所在。
这是数据

这就是结果

我原以为只会退回两排。
谢谢

zd287kbt

zd287kbt1#

表的主键 StudentId ,不是 StudentId . 所以正确的查询是:

select * from Courses 
inner join Enrollments on Enrollments.CourseId = Courses.CourseId
inner join Student on Enrollments.StudentId = Student.Id
where Courses.CourseId = 1
wmvff8tz

wmvff8tz2#

查询中的每一列都必须用表名限定。
您没有限定该列 StudentId 在此联接中:

inner join Student on Enrollments.StudentId = StudentId

如果你这样做了,你会发现错误是没有列 StudentId 在table上 Student 你应该使用这个列 Id :

select * from Courses 
inner join Enrollments on Enrollments.CourseId = Courses.CourseId
inner join Student on Enrollments.StudentId = Student.Id
where Courses.CourseId = 1

或者更好地使用表的别名:

select * 
from Courses as c
inner join Enrollments as e on e.CourseId = c.CourseId
inner join Student as s on e.StudentId = s.Id
where c.CourseId = 1

相关问题