T-SQL如何:比较和列出表中的重复条目

时间:2010-06-10 13:03:33

标签: sql-server tsql select

SQL Server 2000.单个表包含一个用户列表,其中包含唯一的用户ID和非唯一的用户名。

我想搜索表并列出共享相同非唯一用户名的所有用户。例如,我的表看起来像这样:

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大师。我可以做基本的连接等,但我认为必须有一种优雅的方式来做到这一点。除了优雅,必须有任何方法来做到这一点。

我感谢您在此主题上可以帮助我的任何方法。谢谢! --- ---丹

4 个答案:

答案 0 :(得分:1)

单程

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

子查询选择具有该名称的&gt; 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

答案 3 :(得分:0)

您可以尝试以下操作:

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