如何在SQL Server中检查重复记录

13

有没有人知道如何编写SQL Server脚本来检查表中是否包含重复的电话号码?

示例:

我有一个名为customer的表,其中包含以下数据

name   telephone
alvin  0396521254
alan   0396521425
amy    0396521425

我该如何在SQL Server中编写一个脚本,以返回那些具有重复电话号码的记录?


重复问题被标记为重复,哈哈! - Paulo Roberto Rosa
3个回答

29

查看包含重复值的数值:

  SELECT c.telephone
    FROM CUSTOMER c
GROUP BY c.telephone
  HAVING COUNT(*) > 1

要查看表格中与这些重复项相关的记录:

SELECT c.*
  FROM CUSTOMER c
  JOIN (SELECT c.telephone
          FROM CUSTOMER c
      GROUP BY c.telephone
        HAVING COUNT(*) > 1) x ON x.telephone = c.telephone

@astander:如果这场偏头痛能消失就好了,我需要更多的参与,才能保持领先。 - OMG Ponies
你的缓冲区已经足够大了。我认为你需要休息一下 X-) - Adriaan Stander
@astander:恐怕你已经超出了我的30K缓冲区 - 你需要停止并放弃,以便重新建立平衡。 :p - OMG Ponies
这两个查询有什么不同? - Pratik
1
第一个查询将识别重复的电话号码,而第二个查询将让您访问所有重复条目的所有列。 - IcedDante

1
你可以尝试类似这样的代码:
;WITH Duplicates AS (
        SELECT  Telephone
        FROM    Table
        HAVING  COUNT(1) > 1
)
SELECT  t.*
FROm    Table t INNER JOIN
        Duplicates d ON t.Telephone = d.Telephone

或者甚至是像这样的东西

SELECT  *
FROM    Table t
WHERE   EXISTS  (
                    SELECT  1
                    FROM    Table tI    
                    WHERE   tI.Telephone = t.Telephone
                    AND     tI.Name != t.Name
                )

0

我相信会有人提出更好的解决方案,但我还是给出我的简陋方法。

如果是我,我会使用聚合COUNT函数和GROUP BY子句。

我会编写如下的SQL语句:

SELECT telephone, COUNT(telephone)[Entries] FROM table1
GROUP BY telephone
HAVING Entries > 1

这应该返回任何重复的电话号码,并计算有多少个重复存在。


2
什么??除了HAVING之外,你使用的是哪个允许在GROUP BY之后使用WHERE子句的数据库? - Adriaan Stander
1
SQL Server 允许在使用 GROUP BY 时使用 WHERE。尽管它会在结果集之前发生,所以在这种情况下很可能需要使用 HAVING(在生成结果集后,将应用 HAVING)。http://technet.microsoft.com/zh-cn/library/ms177673.aspx - Frazell Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接