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   

これはうまく機能します。今やりたいことは、users.DupEmail というフィールドを「YES」で更新することですが、これを行う方法がわかりません。選択を置き換えるために更新行を入れようとしましたが、ここに戻って助けを求めているので、明らかに間違っています。

誰でも助けてもらえますか?

4

2 に答える 2

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
于 2012-05-03T14:46:10.703 に答える
0

次のスクリプトで問題を解決する必要があります。アップデートを適用する前に、安全を確保し、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
)
于 2012-05-03T14:53:27.317 に答える