删除重复

时间:2012-01-31 16:12:32

标签: mysql sql database

我有很多在telephone字段中重复的电话号码。如何通过SQL完成?

我想删除重复的记录。

我也想知道有多少是重复的?

由于

3 个答案:

答案 0 :(得分:1)

试试这个:

DELETE FROM phonenumbers WHERE telephone = "[phone number here]" AND id NOT IN (SELECT id FROM phonenumbers WHERE telephone = "[phone number here]" LIMIT 1)

除了第一个

之外,这将删除所有具有该电话号码的条目

注意,假设您的表中有唯一标识符ID。 (并且您的表名为phonenumbers。将其更改为您的真实表名

答案 1 :(得分:0)

此查询可能有所帮助:

DELETE `P`.*
FROM `phones` `P` 
LEFT JOIN ( 
    SELECT `telephone`, MIN(`id`) `ids` 
    FROM `phones` 
    GROUP BY `telephone` 
) `TA` ON `P`.`id` = `TA`.`ids` 
WHERE `TA`.`ids` IS NULL;

请注意根据您的架构更改表名称和字段名称。此外,以上假设您的表具有主列,在上述查询中表示为id

逻辑是:

  1. 使用子查询,我们首先找出所有电话号码和每个号码的第一条记录。这些是将保留的记录,其余记录将被删除
  2. 然后我们在“phones”表和派生表之间进行左连接,并删除派生表中不匹配的“phone”中的所有记录
  3. 上述查询的好处是它将一次性删除所有重复记录。

    对于重复计数,您可以执行以下操作:

    SELECT `telephone`, COUNT(1) `cnt` 
    FROM `phones` 
    GROUP BY `telephone` 
    HAVING COUNT(1) > 1 
    

    希望它有所帮助!

答案 2 :(得分:0)

这是一个简单的表,它将您的表复制到一个缺少重复“电话”字段的新表:

CREATE TABLE addrbook2
  SELECT * FROM addrbook GROUP BY telephone

然后,您可以删除旧的addrbook表,并根据需要将新的addrbook2重命名为addrbook。