2011-08-21 140 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)