1

让我们想象两个表:

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 电子邮件地址)。如何解决?

4

3 回答 3

1

update emails set user=1 where user=2然后你可以简单地在 用户名表中删除包含id 2的行

于 2013-01-23T09:21:28.990 回答
0

更新您的用户名表。对于每个重复的名称(triplet、quat...),更新 emails 表并将用户替换为原始用户 ID。

于 2013-01-23T09:39:47.780 回答
0

SQLFiddle 演示

首先,您应该更新表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;
于 2013-01-23T14:16:56.983 回答