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)...
ビットは、特定の名と姓の組み合わせに対して一意の(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
サブクエリを回避します。