если у вас есть первичный ключ, такой как id, вы можете сделать:
delete from people
where id not in
(
select minid from
(select min(id) as minid from people
group by firstname, lastname) as newtable
)
Бит подзапроса select min(id)...
получает уникальные (на основе идентификатора) строки для заданной комбинации имени, фамилии; а затем вы удаляете все остальные строки, т.е. ваши дубликаты. Вам нужно обернуть свой подзапрос из-за ошибки в MySQL, в противном случае мы могли бы сделать:
delete from people
where id not in
(
select min(id) as minid from people
group by firstname, lastname
)
лучше было бы:
delete people from
people left outer join
(
select min(id) as minid from people
group by firstname, lastname
) people_grouped
on people.first_name = people_grouped.first_name
and people.last_name = people_grouped.last_name
and people_grouped.id is null
чтобы избежать подзапроса.