Mysql,如何摆脱重复记录,加入?

时间:2013-01-23 09:15:31

标签: mysql sql duplicates

让我们想象两个表:

username
 id, name
 1   username1
 2   username1
 3   username2

emails
 id, user, name
 1   1     assdf@sdf.hu
 2   2     afgdf@sdf.hu
 3   3     gfg@sdf.hu

问题是有重复的条目。我不能简单地删除它们,因为记录与它们相连,所以它们会丢失。 (例如afgdf@sdf.hu电子邮件地址)。怎么解决?

3 个答案:

答案 0 :(得分:1)

update emails set user=1 where user=2然后您只需在用户名表中删除包含 id 2 的行

答案 1 :(得分:0)

更新您的用户名标签。对于每个重复的名称(triplet,quat ...),请更新电子邮件表并将用户替换为原始用户ID。

答案 2 :(得分: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,我们仅保留MINIMAL 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;