En metode bruger simpelthen betinget aggregering:
insert into users_settings (user_id, key)
select user_id, 'app_reminder'
from users_settings
group by user_id
having sum(key = 'app_reminder') = 0;
Du vil måske have en mere generisk løsning. Hvis du vil sikre, at bruger/nøglepar aldrig duplikeres, skal du oprette en unik begrænsning eller indeks på disse kolonner:
alter table users_settings add constraint unq_users_settings_user_id_key
unique (user_id, key);
Derefter kan du springe over at indsætte rækkerne ved at bruge on duplicate key update
:
insert into users_settings (user_id, key)
select distinct user_id, 'app_reminder'
from users_settings
on duplicate key update user_id = values(user_id);
update
gør ingenting, fordi værdien er den samme. MySQL springer over at udføre indsættelsen og returnerer ikke en fejl.