Поскольку вы используете столбец ID в качестве индикатора которого запись является «оригинальным»:
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Это оставит одну запись на адрес электронной почты.
редактировать добавить:
Для объяснения выше запрос ...
Идея заключается в том, чтобы присоединиться к таблице против себя. Представьте, что у вас есть две копии таблицы, каждая из которых называется чем-то другим. Затем вы можете сравнить их друг с другом и найти самый низкий идентификатор или для каждого адреса электронной почты. Затем вы увидите дубликаты записей, которые были созданы позже, и могут удалить их. (Я визуализировал Excel, думая об этом.)
Чтобы сделать эту операцию на столе, сравните ее с собой и сможете идентифицировать каждую сторону, вы используете псевдонимы таблиц. x
- псевдоним таблицы. Он присваивается в предложении from
следующим образом: from <table> <alias>
. x
теперь можно использовать в другом месте в том же запросе, чтобы ссылаться на эту таблицу как ярлык.
delete x
начинает запрос с нашего действия и цели. Мы собираемся выполнить запрос для выбора записей из нескольких таблиц, и мы хотим удалить записи, которые появляются в x
.
Псевдонимы используются для обозначения обоих «экземпляров» таблицы. from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail
ударяет по столу против себя, где совпадают письма. Без предложения where, которое следует, каждая запись будет выбрана, поскольку она может быть объединена против самого себя.
Статья where
ограничивает выбранные записи. where x.id > z.id
позволяет «экземпляру» aliased x
содержать только записи, соответствующие сообщениям электронной почты, но имеющие более высокое значение id
. Данные, которые вы действительно хотите в таблице, уникальные адреса электронной почты (с наименьшим идентификатором) не будут частью x
и не будут удалены. Единственными записями в x
будут дублированные записи (адреса электронной почты), которые имеют более высокий id
, чем оригинальная запись для этого адреса электронной почты.
Джойн и где пункты могут быть объединены в этом случае:
delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id
Для предотвращения дублирования, рассмотреть вопрос о внесении в столбце subscriberEmail УНИКАЛЬНЫЙ индексированный столбец.
Вы должны отметьте ответ как «принятый» :-) – watery