Teknik ini menggabungkan tabel dengan dirinya sendiri dalam subkueri, tetapi hanya cocok dengan satu baris (berdasarkan contact_id dan pencocokan email. Triknya adalah subquery mengembalikan hanya salah satu alamat email menggunakan MIN, secara teoritis yang pertama menurut abjad (tidak dapat diandalkan, tetapi Anda mengatakan itu tidak masalah).
Saya telah menguji ini dengan hasil yang baik.
UPDATE
email
JOIN (SELECT contact_id, MIN(email) as email
FROM email GROUP BY contact_id) as singles
USING(contact_id, email)
set is_primary=1;