2012-05-03 7 views
0

私はテーブル内の重複する電子メールアドレスをすべて返す次のMysqlセレクトを持っています。レコードのフィールドが重複していると判明した場合に更新する

SELECT users.FirstName, `Surname`, users.email1 
FROM users 
INNER JOIN ( 
    SELECT email1 
    FROM users 
GROUP BY email1 
HAVING count(email1) > 1) dup ON users.email1 = dup.email1 
ORDER BY users.email1 

これは私が今したいものを、素晴らしい作品は、更新が「YES」とusers.DupEmailと呼ばれる分野であるが、私はこれを行う方法がわからないと思います。私は選択肢を置き換えるために更新行を入れようとしましたが、私はここに戻って助けを求めているので、間違っています。

誰でも助けてください。

答えて

2

あなただけで複数のテーブルUPDATE構文を使用することができます自己結合:

UPDATE users AS u1 
    JOIN users AS u2 USING (email1) 
    SET u1.DupEmail = 'YES' 
WHERE NOT u1.id = u2.id; -- use your primary key here 
+0

エジプトの迅速な対応に感謝します。 – user965526

0

次のスクリプトは、あなたの問題を解決しなければならない - 安全で、更新をaplying前に結果をテストするためにSELECTを使用します。

-- SELECT FirstName, Surname, email1 
-- FROM users 

UPDATE users 
SET DupEmail = 1 
WHERE u0.email1 IN (
    SELECT u1.email1 
    FROM users u1 
    GROUP BY u1.email1 
    HAVING COUNT(*) > 1 
) 
関連する問題