2016-11-09 4 views
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

Как я могу написать запрос для этого?

+0

Sometnihg нравится это? 'select count (a.StudentId), a.Name from Student a, SudentId_Subject b, где b.EmpId = a.StudentId group по имени.Name, b.Department'. Вы уверены, что в одном отделе работают не два Питерса? – Nomeaning25

ответ

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) 
+0

Спасибо. позвольте мне попробовать – Peter

+0

это «тема», а не «отдел»;) –

+0

@JimishGamit Ну, изначально это был «отдел», когда я записал ответ :) – sagi

-1

выберите * от студента осталось присоединиться SudentId_Subject на Student.SudentId = SudentId_Subject.DepId где Student.SudentId = SudentId_Subject. DepId

Смежные вопросы