从表格中删除重复记录

3

我在MySQL中有一张名为ZipCode的表,它包含以下字段:id、zipcode、city、state。该表中存在一些重复记录,即同一个邮政编码出现了两次。

我想要删除所有重复的邮政编码,并且每个邮政编码只保留一次。

如何正确处理这个问题呢?


可能是删除重复SQL记录的重复问题。 - Bohemian
3个回答

7
-- remove duplicates

DELETE z1
FROM ZipCode z1, ZipCode z2
WHERE z1.zipcode = z2.zipcode AND z2.id < z1.id;

-- add a primary key

ALTER TABLE ZipCode ADD PRIMARY KEY (zipcode);

-- or a unique key

ALTER TABLE ZipCode ADD UNIQUE INDEX zipcode_unique (zipcode);

4
这组三条查询将会移除所有重复项:
CREATE TABLE new_table AS SELECT * FROM old_table WHERE 1 GROUP BY zip;
DROP TABLE old_table;
RENAME TABLE new_table TO old_table;

2
不要忘记在此之后重新创建索引和约束 :) - Arnaud Le Blanc
...并在新表上引入主键约束以防止重复。 - hmakholm left over Monica
是的,没错。而且,修复插入重复行的代码,使其检查插入的行是否唯一。 - EdoDodo
3
你可以将此代码更改为CREATE TABLE new_table LIKE old_table; INSERT INTO new_table SELECT * FROM old_table WHERE 1 GROUP BY zip;,以避免重新创建索引等步骤。 - Michael Mior

0

试试这个,它运行得很好

DELETE
FROM
insurance_policy_customers ipc
WHERE
ipc.id NOT IN (SELECT
min(ipc.id)
FROM
insurance_policy_customers ipc
GROUP BY
ipc.resident_insurance_policy_id )

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