【发布时间】:2018-03-06 10:36:41
【问题描述】:
我有 3 张桌子:
表 1ExamTB:
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 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
【问题讨论】:
-
只需在选择查询中的列之前使用 DISTINCT 命令以避免重复。
-
这些表2中的一个不应该有不同的名称吗?
-
@YogeshSharma...根据我的经验,在 90% 的情况下,
DISTINCT只是隐藏了查询中的错误。您应该始终首先找出重复的来源,并且仅将DISTINCT用作最后的手段。 -
学习自己调试这些东西。从最简单的查询开始,然后一次添加一个表。您会很快发现问题出在哪里。
-
谢谢我和你说的一样,我发现那行 INNER JOIN ExamSubMarksTB ON ExamResultTB.ExamID = ExamSubMarksTB.ExamID 那行出错了,现在在 Arkadiusz 的帮助下工作得很好,谢谢你的回复和帮助
标签: sql sql-server sql-server-2008 c#-4.0 sql-server-2005