I use to do
SELECT email, COUNT(email) AS occurences
FROM wineries
GROUP BY email
HAVING (COUNT(email) > 1);
to find duplicates based on their email.
But now I'd need their ID to be able to define which one to remove exactly.
The second constraint is: I want only the LAST INSERTED duplicates.
So if there's 2 entries with test@test.com as an email and their IDs are respectively 40 and 12782 it would delete only the 12782 entry and keep the 40 one.
Any ideas on how I could do this? I've been mashing SQL for about a hour and can't seem to find exactly how to do this.
Thanks and have a nice day!
play with it on sqlfiddle.com
This is the simplest option:
This will only keep the first inserted record for each email address, all other records will be deleted. Credit for this answer should go to @juergen d since this is just a revised version of his answer.
You need a subquery to trick MySQL to delete from a table it is selecting from at the same time.
Well, you sort of answer your question. You seem to want
max(id)
:You can delete the others using the statement. Delete with
join
has a tricky syntax where you have to list the table name first and then specify thefrom
clause with the join:Or writing this as an
exists
clause: