2013-07-09 234 views
0

我的問題是,刪除重複記錄包括原始

我擁有電子郵件,名字,和姓氏列的表。我可以使用哪些查詢刪除重複項,包括的原始內容?

因此,如果表中有兩個記錄,像這樣:

[email protected] | john | doe  
[email protected] | john | doe 

我怎麼能刪除兩個記錄,因此該記錄是完全從表中刪除?

我感謝你的幫助

回答

1

該查詢將刪除具有相同的電子郵件,名字和姓氏的所有行:

DELETE yourtable.* 
FROM 
    yourtable INNER JOIN (SELECT email, firstname, lastname 
         FROM yourtable 
         GROUP BY email, firstname, lastname 
         HAVING COUNT(*)>1) dup 
    ON yourtable.email = dup.email 
    AND yourtable.firstname = dup.firstname 
    AND yourtable.lastname = dup.lastname 

請參閱小提琴here

我正在使用將返回所有重複項的子查詢,並且我正在使用yourtable本身加入所有重複項,並刪除與該連接匹配的所有行。

編輯:如果你有一個表稱爲重複全部重複,你可以使用這個刪除查詢:

DELETE Contacts.* 
FROM 
    Contacts INNER JOIN Duplicates 
    ON Contacts.email = Duplicates.email 
    AND Contacts.firstname = Duplicates.firstname 
    AND Contacts.lastname = Duplicates.lastname 

這將匹配重複的行(具有相同的電子郵件中的聯繫人刪除所有行,相同的名字和相同的姓氏)

+0

非常感謝您如此快速地回到我身邊。小提琴非常出色,但是當我運行查詢(嘗試兩次)時,它會掛起一個閃爍的光標。有任何想法嗎? 大約有50,000條記錄,我在12 GB內存的Core i7上運行 – Marshma11ow

+0

您的表有多大?你可以嘗試添加一個索引(電子郵件,名字,姓氏) – fthiella

+0

(編輯我的最新評論)大約有50,000條記錄。我正在運行帶有12GB內存的Core i7-3770。 這個怎麼樣..我有1個表,稱爲「重複」(相同的領域)和另一個表,「聯繫人」(相同的領域)。是否可以設置一個查詢來刪除「聯繫人」中的所有記錄在「重複」中具有相同的記錄? – Marshma11ow