我有很多在telephone
字段中重复的电话号码。如何通过SQL完成?
我想删除重复的记录。
我也想知道有多少是重复的?
由于
答案 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
。
逻辑是:
上述查询的好处是它将一次性删除所有重复记录。
对于重复计数,您可以执行以下操作:
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。