この手法は、サブクエリでテーブルをそれ自体に対して結合しますが、1つの行にのみ一致します(contact_idおよびに基づく) メールマッチング。秘訣は、サブクエリがMINを使用してメールアドレスの1つだけを返すことです。理論的には、最初のメールアドレスをアルファベット順に返します(信頼性はありませんが、問題ではないとおっしゃっていました)。
私はこれをテストして良い結果を出しました。
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;