查询没有重复

时间:2015-05-17 17:38:48

标签: mysql sql database

我创建了三个表。一个是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

2 个答案:

答案 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