Actualización de un campo de registro si se encuentra que es un duplicado

Tengo la siguiente selección de Mysql que devuelve todas las direcciones de correo electrónico duplicadas en mi tabla.

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   

Esto funciona muy bien, lo que deseo hacer ahora es actualizar un campo llamado users.DupEmail con "SÍ", pero no estoy seguro de cómo hacerlo. He intentado poner una línea de actualización para reemplazar la selección, pero claramente me estoy equivocando porque estoy de vuelta aquí pidiendo ayuda.

¿Alguien puede ayudar por favor?

preguntado el 03 de mayo de 12 a las 15:05

2 Respuestas

Puedes usar la tabla múltiple UPDATE sintaxis con una autounión:

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

contestado el 03 de mayo de 12 a las 15:05

Gracias eggyal una respuesta rápida - probado y funcionando, impresionante - user965526

El siguiente script debe resolver su problema: esté seguro y use SELECT para probar los resultados antes de aplicar la actualización:

-- 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
)

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.