Sql server 在SQL Server中使用重复值联接3个表

Sql server 在SQL Server中使用重复值联接3个表,sql-server,ado.net,Sql Server,Ado.net,我有三张桌子 存储主题及其详细信息的主题表 subject_id subject_code title lec_units lab_units year_offered course_offered sem_offered 我存储学生注册科目的已注册表 id course_code student_id subject_code year_enrolled school_year 最后是成绩表,我在其中存储每个科目的学生成绩 grade_id student_id subject_code

我有三张桌子

存储主题及其详细信息的主题表

subject_id
subject_code
title
lec_units
lab_units
year_offered
course_offered
sem_offered
我存储学生注册科目的已注册表

id
course_code
student_id
subject_code
year_enrolled
school_year
最后是成绩表,我在其中存储每个科目的学生成绩

grade_id
student_id
subject_code
grade
我选择打印的等级如下:

Select g.subject_code,g.grade,su.title,su.year_offered,su.sem_offered,e.school_year from grades g left join subjects su on g.subject_code= su.subject_code left join enrolled e on g.subject_code = e.subject_code where (g.student_id='" + data_listview.FocusedItem.Text + "' and su.sem_offered = '1st' and e.year_enrolled= '1st')
但因为在我的注册表中,另一个学生也注册了同一科目,所以我得到了重复的行。那么,如何防止重复行?提前谢谢

试试这个

SELECT
  g.subject_code,
  g.grade,
  su.title,
  su.year_offered,
  su.sem_offered,
  e.school_year
FROM grades g
LEFT JOIN subjects su
  ON g.subject_code = su.subject_code
LEFT JOIN enrolled e
  ON g.subject_code = e.subject_code

  and g.student_id = e.student_id  -- you are missing this to link the student

WHERE (g.student_id = '" + data_listview.FocusedItem.Text + "'
AND su.sem_offered = '1st'
AND e.year_enrolled = '1st')

您好,所以我尝试添加了您第一次评论的distinct,它很有效,尝试了这样做,也很有效,我更喜欢这个解决方案。谢谢你救了我的命!这是恰当的解决方案,而不是明显的欢呼。