我是SQL联接的新手,所以请耐心等待,我要做的是按每位学生每周加总的方式列出学生的考试成绩。我的查询是
SELECT
agg.Week,
meta.Category,
agg.Student,
meta.Funding,
agg.Test_Results,
agg.Test_Points,
phy.Test_Results,
phy.Test_Points
FROM Agriculture agg
INNER JOIN metadata meta
ON meta.Student_ID = agg.Student_ID
INNER JOIN Physics phy
ON phy.Student_ID = agg.Student_ID
WHERE agg.Week BETWEEN '1' AND '5'
在我看来,这是正确的,但是由于某种原因,Test_Results和Test_Points会不断重复自身,因此我不确定如何解决。我的意思是重复,因为每个星期的分数都是120,所以一个学生(9)的得分为95,那95将一次又一次地重复给同一个学生。我不确定是否需要将子查询添加到INNER JOINS。
表为:
元数据->(类别,资金,学生ID)(一对多比较表)
物理->(测试结果,测试点,学生ID)(很多)
农业->(周,学生,Test_Results,Test_Points,Student_ID)(多对多)
再次,我是新加入会员,因此如果您需要更多信息,请告诉我。
答案 0 :(得分:1)
您通过使用Student_ID加入表。如果来自农业的同一Student_ID的元数据中有多个对应行,则结果集将显示重复项。 表物理也是如此。
例如:在农业表中有一个Student_ID的行有10行,在具有相同Student_ID的元数据中有2行,如果您加入这些表,您将获得20行。
您确实可以使用子查询来减少元数据和物理中每个Studen_ID的行数,并加入这些子选择。
答案 1 :(得分:0)
您只需将DISTINCT关键字用于agg.Student。