从与另一个表相关联的表中删除重复项

4
Student
_______________________
SudentId   Name
101        Peter
103        John
112        James
116        Peter
117        Peter


SudentId_Subject
_______________________
SudentId Subject
101      Physics
103      Chemistry
112      Mathematics
116      Physics
117      Commerce
为了查找重复的学生,我尝试了以下查询:select * from Student group by Name having count(*)>1,得到了如下结果:
SudentId   Name
_______________________
101        Peter
116        Peter
117        Peter

实际上我需要筛选出具有相同主题的学生。即,

101        Peter
116        Peter

这些邮件是重复的(主题相同),但不包括 117 Peter

我该如何编写查询语句?


类似这样的代码?select count(a.StudentId), a.Name from Student a, SudentId_Subject b where b.EmpId = a.StudentId group by a.Name, b.Department。你确定没有两个名叫Peter的人在同一个部门工作吗? - Nomeaning25
2个回答

3

我可能把事情复杂化了,但是想不到更简单的方法:

SELECT ss.student_id,ss.name
FROM student ss
JOIN studentid_subject tt
 ON(ss.student_id = tt.student_id)
JOIN(SELECT t.name,s.department
     FROM student t
     JOIN studentid_subject s
      ON(t.student_id = s.student_id)
     GROUP BY t.name,s.department
     HAVING COUNT(*) > 1) p
 ON(ss.name = p.name and tt.department = p.department)

谢谢。让我试试。 - Peter
它是“主题”,而不是“部门” ;) - Jimish Gamit
@JimishGamit 好吧,当我写下答案时,原本是 department :) - sagi

-1

选择 * 从学生左连接 SudentId_Subject on Student.SudentId = SudentId_Subject.DepId where Student.SudentId=SudentId_Subject.DepId


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,