2017-09-25 81 views
0

我有3個表:選擇命令返回重複的行

表1 ExamTB

ID ExamTerm ExamDate 
1 MidTerm 2017-09-24 
2 FinalTerm 2017-12-01 

表2 ExamSubMarksTB

ID ExamID ClassID SubjectID TotalMarks PassMarks 
1  1   1  1  100   50 
2  1   1  2  100   50 
3  1   1  3  100   50 
4  2   1  1  100   50 
5  2   1  2  100   50 
6  2   1  3  100   50 

表3 ExamResultTB

ID ExamID ClassID SubjectID MarksObtain StdID 
1  1   1   1   80   1 
2  1   1   2   70   1 
3  1   1   3   60   1 
4  2   1   1   50   1 
5  2   1   2   72   1 
6  2   1   3   68   1 

現在,當我創建一個存儲過程的SELECT這個SELECT語句返回重複的行

SELECT ExamResultTB.ExamID 
    , ExamTB.ExamTerm 
    , ExamTB.ExamDate 
    , ExamResultTB.StdID 
    , StudentTB.Name 
    , StudentTB.FatherName 
    , ClassTB.ClassName 
    , SubjectTB.Subject 
    , ExamResultTB.ObtainMarks 
    , ExamSubMarksTB.TotalMarks 
    , ExamSubMarksTB.PassMarks 
FROM ExamResultTB 
    INNER JOIN ExamTB ON ExamResultTB.ExamID = ExamTB.ID 
    INNER JOIN ClassTB ON ExamResultTB.ClassID = ClassTB.ID 
    INNER JOIN SubjectTB ON ExamResultTB.SubjectID = SubjectTB.ID 
    INNER JOIN StudentTB ON ExamResultTB.StdID = StudentTB.ID 
    INNER JOIN ExamSubMarksTB ON ExamResultTB.ExamID = ExamSubMarksTB.ExamID 
WHERE ExamResultTB.ExamID = 4 
    AND ExamResultTB.StdID=1 
+0

只需在選擇查詢中的列之前使用DISTINCT命令以避免重複吃了。 –

+0

不應該有一個_Table 2_有一個不同的名稱? – SqlZim

+1

@YogeshSharma ...根據我的經驗,在90%的案例中,「DISTINCT」只是在查詢中隱藏了一個錯誤。你應該**總是**首先找出重複來自哪裏,並且只使用'DISTINCT'作爲最後的手段。 – HoneyBadger

回答

1

爲了確保這條線做一個重複的行:

INNER JOIN ExamSubMarksTB ON ExamResultTB.ExamID = ExamSubMarksTB.ExamID 

你應該做這樣:

INNER JOIN ExamSubMarksTB ON ExamResultTB.ExamID = ExamSubMarksTB.ExamID and 
ExamResultTB.ClassId = ExamSubMarksTB.ClassId and ExamResultTB.SubjectID = 
ExamSubMarksTB.SubjectID 
+0

是的這條線是讓問題現在它與你的更正一起工作非常感謝你,我從昨晚(y) –