1

2つのテーブルを想像してみましょう。

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次に、 ユーザー名テーブルにID2を含む行をドロップするだけです。

于 2013-01-23T09:21:28.990 に答える
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 に答える
0

ユーザー名表を更新します。重複するすべての名前(triplet、quat ...)について、emailsテーブルを更新し、ユーザーを元のユーザーIDに置き換えます。

于 2013-01-23T09:39:47.780 に答える