Мне попался вопрос от Leetcode.
https://leetcode.com/problems/delete-duplicate-emails/
Один подход ниже:
DELETE FROM Person WHERE Id NOT IN (SELECT MIN(p.Id) FROM (SELECT * FROM Person) p Group by p.Email);
Интересно, почему ему нужен подзапрос для самой таблицы (SELECT MIN(p.Id) FROM (SELECT * FROM Person)
вместо просто (SELECT MIN(p.Id) FROM Person p)
Это взлом в MySQL. MySQL не позволяет DELETE
или UPDATE
напрямую ссылаться на изменяемую таблицу. Дополнительный подзапрос материализует таблицу и позволяет коду работать.