2012-01-31 142 views
1

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

我想删除重复的记录。

我也想知道有多少重复?

感谢

+0

可能的重复http://stackoverflow.com/q/8567007/27535或http://stackoverflow.com/q/8590010/27535和更多 – gbn 2012-01-31 16:14:22

+0

必须只使用SQL?不能为此写一点代码吗? 这将是一个代码功能更容易 – 2012-01-31 16:16:52

+0

可能重复的[删除重复在mysql数据库](http://stackoverflow.com/questions/8793231/remove-duplicates-in-mysql-database) – 2012-01-31 16:28:45

回答

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您表。 (和你的tablename是phonenumbers更改是为你的真实的表名

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. 使用子查询,我们先找出所有的t电话号码和每个号码的第一条记录。这些都是将保持记录,其余的删除
  2. 那么我们从“手机”不派生表匹配做了左之间的“手机”表和派生表,并删除所有记录

上述查询的好处是它将一次性删除所有重复记录。

对于重复计数,你可以这样做:

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

希望它能帮助!

+0

@ user791022,你尝试解决方案?它有用吗? – Abhay 2012-02-03 17:58:47

0

这里有一个简单的那份表中,以缺乏复制“电话”领域一个新问题:

CREATE TABLE addrbook2 
    SELECT * FROM addrbook GROUP BY telephone 

然后,您可以删除旧addrbook表,并重新命名新addrbook2到addrbook,如果你想要的。