【问题标题】:T-SQL How To: Compare and List Duplicate Entries in a TableT-SQL 操作方法:比较和列出表中的重复条目
【发布时间】:2010-06-10 13:03:32
【问题描述】:

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

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

【问题讨论】:

    标签: sql-server tsql select


    【解决方案1】:

    一种方式

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        子查询选择所有具有 >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
        

        【讨论】:

          【解决方案4】:

          您可以尝试以下方法:

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

          【讨论】:

            猜你喜欢
            • 2016-04-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-01-27
            • 1970-01-01
            • 2019-09-06
            相关资源
            最近更新 更多