我创建了三个表。一个是MidTerm
,另一个是FinalTerm
,最后一个是Results
。
每个列都有列:Student_ID,Student_Name,Score,Course_ID。
这意味着在所有具有相同ID但分数不同的表中都有相同的学生。我想从三个表中检索,查询Student_ID,Student_Name和Scores。但是当我这样做时,有很多重复。一个学生可以拥有一个ID但许多课程这么多课程ID,这意味着他可以有一个以上的分数。
如何为其编写查询?
SELECT dbo.FinalTerm.Student_ID, dbo.FinalTerm.Student_Name, dbo.FinalTerm.Score, dbo.Results.Score AS Expr1, dbo.Results.Course_ID,
dbo.MidTerm.Score AS Expr2, dbo.MidTerm.Course_ID AS Expr3, dbo.FinalTerm.Course_ID AS Expr4
FROM dbo.FinalTerm INNER JOIN
dbo.Results ON dbo.FinalTerm.ID = dbo.Results.ID INNER JOIN
dbo.MidTerm ON dbo.Results.Student_ID = dbo.MidTerm.Student_ID
答案 0 :(得分:1)
如果你打算列出学生的所有分数,你可以使用GROUP_CONCAT
SELECT
m.Student_ID, m.Student_Name, GROUP_CONCAT(m.Score,' ',f.Score,' ',r.Score)
FROM
MidTerm m
inner join FinalTerm f on m.Student_ID = f.Student_ID
inner join Results r on f.Student_ID = r.Student_ID
GROUP BY
Student_ID, Student_Name;
另外,您可能不应该将student_name保留在所有表中。更好的方法是创建一个学生表,您可以保留所有学生的详细信息,并将student_id留在其他表中以引用学生表
答案 1 :(得分:0)
你的目标不是100%明确,而只是我对你要找的东西的猜测:
SELECT
dbo.FinalTerm.Student_ID,
dbo.FinalTerm.Student_Name,
dbo.FinalTerm.Course_ID,
SUM(dbo.FinalTerm.Score) as FinalScore,
SUM(dbo.Results.Score) AS ResultsScore,
SUM(dbo.MidTerm.Score) AS MidTermScore
FROM
dbo.FinalTerm
LEFT JOIN dbo.Results
ON dbo.FinalTerm.Student_ID = dbo.Results.Student_ID
AND dbo.FinalTerm.Course_ID = dbo.Results.Course_ID
LEFT JOIN dbo.MidTerm
ON dbo.FinalTerm.Student_ID = dbo.MidTerm.Student_ID
AND dbo.FinalTerm.Course_ID = dbo.MidTerm.Course_ID
GROUP BY dbo.FinalTerm.Student_ID, dbo.FinalTerm.Course_ID