让我们想象两个表:
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电子邮件地址)。怎么解决?
答案 0 :(得分:1)
update emails set user=1 where user=2
然后您只需在用户名表中删除包含 id 2 的行
答案 1 :(得分:0)
更新您的用户名标签。对于每个重复的名称(triplet,quat ...),请更新电子邮件表并将用户替换为原始用户ID。
答案 2 :(得分:0)
首先,您应该更新表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;