2011-08-21 139 views
3

我在MySQL中有一个名为ZipCode的表,它的字段是:id,zipcode,city,state。它有一些重复的记录;一些邮编显示两次 我想删除所有即将到来的邮编,每个邮政编码只能存储一次。 我如何使它正确?从表中删除重复记录

+0

可能[删除重复记录的SQL(HTTP重复://计算器.com/questions/841447/delete-duplicate-sql-records) – Bohemian

回答

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

并且不要忘记在此之后重新创建索引和约束:) – arnaud576875

+0

...并且在新表上引入主键约束以预先发泄复发, –

+0

是的,没错。而且,修复插入重复项的代码,让它检查它插入的行是否是唯一的。 – EdoDodo

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); 
+1

+1不用于创建新表格。 –

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)