【问题标题】:Select Command return Duplicate Rows选择命令返回重复行
【发布时间】: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


【解决方案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 

【讨论】:

  • 是的,这条线出了问题,现在它正在与您的更正一起工作,非常感谢你,我从昨晚开始就一直在与这个作斗争(y)
猜你喜欢
  • 1970-01-01
  • 2016-09-10
  • 2013-11-09
  • 2013-08-27
  • 2016-07-07
  • 2016-10-18
  • 1970-01-01
  • 1970-01-01
  • 2017-07-06
相关资源
最近更新 更多