2013-01-23 55 views
1

讓我們想象兩個表:Mysql,如何擺脫重複記錄,加入?

username 
id, name 
1 username1 
2 username1 
3 username2 

emails 
id, user, name 
1 1  [email protected] 
2 2  [email protected] 
3 3  [email protected] 

的問題是有重複的條目。我不能簡單地放棄它們,因爲記錄與它們相連,所以它們會迷路。 (例如[email protected]電子郵件地址)。如何解決它?

+0

所以如果theere是多條記錄,其中哪些想找回?在'username.id'的情況下 –

+0

你想要的結果是什麼? –

回答

0

SQLFiddle demo

首先,你應該更新表emails與正確的價值觀,以取代user消除值被刪除。

update emails set user=(select min(id) 
         from username 
         where name= 
         (select name from username where id=emails.user)); 

現在從username刪除表中的重複記錄。我們只保留最小的id記錄每個name

DELETE t1.* 
FROM username t1 
LEFT JOIN (select min(id) mid from username group by name) t2 ON t1.ID = t2.mid 
WHERE t2.mid is null; 
1

update emails set user=1 where user=2然後你可以簡單地丟棄包含行ID 2用戶名

0

更新您的用戶名TABEL。對於每個重複的名稱(triplet,quat ...),更新電子郵件表並用原始用戶標識替換該用戶。