Dado que está utilizando la columna id como un indicador de qué registro es 'original':
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Esto dejará un registro por e-mail.
de edición para añadir:
para explicar la consulta anterior ...
La idea aquí es unirse a la mesa contra sí mismo. Imagine que tiene dos copias de la tabla, cada una llamada algo diferente. Luego, puede compararlos entre sí y encontrar la identificación más baja o para cada dirección de correo electrónico. A continuación, vería los registros duplicados que se crearon más adelante y podría eliminarlos. (Estaba visualizando Excel al pensar en esto.)
Para hacer esa operación en una tabla, compararla consigo mismo y ser capaz de identificar cada lado, use alias de tabla. x
es un alias de tabla. Se asigna en la cláusula from
como lo siguiente: from <table> <alias>
. x
ahora se puede utilizar en otra parte de la misma consulta para hacer referencia a esa tabla como un acceso directo.
delete x
comienza la consulta con nuestra acción y objetivo. Vamos a realizar una consulta para seleccionar registros de varias tablas, y queremos eliminar registros que aparecen en x
.
Los alias se utilizan para referirse a ambas 'instancias' de la tabla. from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail
golpea la tabla contra sí misma donde coinciden los correos electrónicos. Sin la cláusula where que sigue, cada registro se seleccionaría ya que podría unirse entre sí.
La cláusula where
limita los registros que se seleccionan. where x.id > z.id
permite que la 'instancia' con alias x
contenga solo los registros que coinciden con los correos electrónicos pero tiene un valor id
más alto. Los datos que realmente desea en la tabla, las direcciones de correo electrónico únicas (con la identificación más baja) no serán parte de x
y no se eliminarán. Los únicos registros en x
serán registros duplicados (direcciones de correo electrónico) que tengan un id
más alto que el registro original para esa dirección de correo electrónico.
la unión y donde cláusulas podrían combinarse en este caso:
delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id
Para la prevención de duplicados, considerar la posibilidad de la columna de la subscriberEmail una columna indexada ÚNICA.
Usted debe marque una respuesta como "aceptada" :-) – watery