2010-06-10 49 views
1

SQL Server 2000.单表具有包含唯一用户标识和非唯一用户名的用户列表。T-SQL如何:比较和列出表中的重复条目

我想搜索表并列出共享相同的非唯一用户名的任何用户。例如,我的表是这样的:

ID User Name Name 
== ========= ==== 
0 parker  Peter Parker 
1 parker  Mary Jane Parker  
2 heroman  Joseph (Joey) Carter Jones 
3 thehulk  Bruce Banner 

我想要做的就是做一个SELECT并有结果集是:从我的表

ID User Name Name 
== ========= ==== 
0 parker  Peter Parker 
1 parker  Mary Jane Parker 

我不是T-SQL专家。我可以做基本的连接等,但我认为必须有一个优雅的方式来做到这一点。除了优雅之外,一定有任何这样做的方式。

我很欣赏任何可以帮助我处理这个主题的方法。谢谢! ---丹---

回答

1

一种方式

select t1.* from Table t1 
join(
select username from Table 
group by username 
having count(username) >1) t2 on t1.username = t2.username 
0

我能想到的最简单的方式是使用一个子查询:

select * from username un1 where exists 
(select null from username un2 
where un1.user_name = un2.user_name and un1.id <> un2.id); 
0

子查询选择所有具有该名称的行数大于1的名称...外部查询选择与这些ID匹配的所有行。

SELECT T.* 
FROM T 
    , (SELECT Dupe_candidates.USERNAME 
     FROM  T AS Dupe_candidates 
     GROUP BY Dupe_candidates.USERNAME 
     HAVING count(*)>1 
    ) Dupes 
WHERE T.USERNAME=Dupes.USERNAME 
0

你可以尝试以下方法:

SELECT * 
FROM dbo.Person as p1 
WHERE 
(SELECT COUNT(*) FROM dbo.Person AS p2 WHERE p2.UserName = p1.UserName) > 1;