如何在同一个表中返回共享相同ID的不同条目?

时间:2017-05-16 13:46:18

标签: sql-server duplicates

我有一个遗留表:我的数据库(SQL-Server)中的学生如下:

STUDENTID - SURNAME - FORENAME 
 DJ1           Doe       John
 DJ1           Doe       John
 DJ2           Doe       Jane
 DJ2           Doe       Jane
 DJ1           Dark      Odin
 AS1           Tom       Layton
 ....

预计会在我的桌子上出现重复,例如John Doe或Jane Doe 。我不希望将其视为重复数据。我想要避免的是让不同的学生分享同一个STUDENTID(例如Odin Dark和John Doe)。 如何创建一个查询,返回具有不同名称的学生共享相同的STUDENTID

所以我的查询将返回如下内容:

ID  - Surname - Forname
DJ1    Doe      John
DJ1    Dark     Odin

提前致谢。

2 个答案:

答案 0 :(得分:0)

你走了。不是最漂亮的查询,但它可以为您提供我想要的数据。

SELECT * FROM Students s
JOIN 
(SELECT StudentID, Surname, Forename FROM Students
GROUP BY StudentID, Surname, Forename
HAVING COUNT(*) > 1) sub 
ON sub.StudentID = s.StudentID
WHERE sub.Forename <> s.Forename and sub.Surname <> s.Surname and sub.StudentID = s.StudentID

答案 1 :(得分:0)

此查询可以找到具有相同ID的不同名称。它不会显示重复的记录。

select distinct s1.* 
from students s1
join students s2 on s1.studentid = s2.studentid and (s1.surname <> s2.surname or s1.forename <> s2.forename)