我是SQL的新手,需要一些帮助。 我的数据库中有以下3个表格表。
STUDENT Table whose tuple has the following format:
{StuID, LastName, FirstName, MiddleName, EmailID}
COURSES Table whose tuple has the following format:
{CourseID, CourseName, CreditHours, CourseDescription}
TAKEN_COURSES Table whose tuple has the following format:
{ID, StuID, CourseID, Semester, Year}.
现在我想以下列格式显示学生所有课程:
LastName FirstName MiddleName Course1 Course2
May Alice Mary Math Science
Wood Bob Adams Physics History
事先知道每个学生只能参加2门课程。如果学生只参加1门课程,则其他参赛作品可以为空白。
我加入了3个表:
Select Student Student.LName, Student.FName, Student.MiddleName, Courses.CourseName from Student INNER JOIN (Courses INNERJOIN TakenCourses ON Courses.CourseID=TakenCourses.CourseID) ON Student.StuID = TakenCourses.CourseID
这给了我以下内容:
LastName FirstName MiddleName CourseName
May Alice Mary Math
May Alice Mary Science
Wood Bob Adams Physics
Wood Bob Adams History
但我不希望如此。我希望所有课程在一个元组中一个接一个地出现,我真的很难实现这一目标。关于需要做什么的任何建议?
答案 0 :(得分:2)
您可以使用聚合执行所需操作,特别是因为有两个值。您的查询大部分都在那里:
Select s.LName, s.FName, s.MiddleName,
min(c.CourseName) as course1,
(case when min(c.CourseName) <> max(c.CourseName) then max(c.CourseName)
end) as course2
from Student s join
TakenCourses tc
on s.StuID = tc.CourseID
Courses c
on c.CourseID = tc.CourseID
group by s.LName, s.FName, s.MiddleName;
为什么聚合有用?好吧,你每个学生有多行,你只想要一行。在这种情况下,group by
通常是正确的方法。
还要注意使用表别名,这样可以简化写入和读取查询。此外,最好在from
子句中避免括号,如果没有必要的话。