让我们想象两个表:
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 电子邮件地址)。如何解决?
让我们想象两个表:
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 电子邮件地址)。如何解决?
update emails set user=1 where user=2
然后你可以简单地在 用户名表中删除包含id 2的行
更新您的用户名表。对于每个重复的名称(triplet、quat...),更新 emails 表并将用户替换为原始用户 ID。
首先,您应该更新表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;