我正在處理一個MYSQL數據庫,它有以下三列:電子郵件,姓名,姓氏。MYSQL重複刪除重複行並刪除重複行數據最少
我需要做的就是重複數據刪除,我知道我可以使用的功能,如這一個(這個查詢只是排序未刪除)的郵件:
select distinct emails, name, surname from emails;
或
select emails, name, surname from emails group by emails having count(*) >= 2;
不過,我還需要確保在發現重複的電子郵件地址時,保留的電子郵件地址是具有名稱和/或姓氏值的電子郵件地址。
例如:
| id |電子郵件 |名稱|姓氏
| 1 | [email protected] |鮑勃 |保爾森 |
| 2 | [email protected] | | |
在這種情況下,我想保留第一個結果並刪除第二個。
我一直在尋找使用'案例'或'如果'的陳述,但沒有經驗與使用這些。我試圖用這些陳述擴展上述功能,但無濟於事。
任何人都可以指向正確的方向嗎?
PS:表中的第一列是自動增加一個ID值,如果可以幫助
更新1:下面到目前爲止@Bohemian答案是偉大的工作,但在一種情況下發生故障,其中有一個重複電子郵件地址在一行中有一個名字,但沒有姓,在下一行它沒有名字,但有一個姓。它將保留這兩個記錄。所有需要編輯的內容都是爲了讓這兩個記錄中的一個被刪除,不管是哪一個。
更新2:@波希米亞的答案很好,但經過更多測試後,我發現它存在一個根本性的缺陷,它只在存在重複的電子郵件行時名稱和姓氏字段有數據上表中的第一項)。如果電子郵件重複,但所有行都沒有填寫名稱和姓氏字段,則所有這些行都將被忽略,並且不會進行重複數據刪除。
此查詢的最後一步是找出如何刪除不符合當前必要條件的重複項。如果一行只有名字而另一行只是姓氏,那麼刪除它並不重要,因爲電子郵件是重要的事情。
當一行有名字和下一個姓氏時需要做什麼? –
這是你打算定期做的事情,還是隻是一次性修復? – martin
在這種情況下,我會認爲最好的解決方案是將兩者連接起來,儘管我認爲這會使問題變得複雜。 – psychedelus