Eén methode gebruikt gewoon voorwaardelijke aggregatie:
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;
Misschien wilt u een meer generieke oplossing. Als u ervoor wilt zorgen dat gebruikers-/sleutelparen nooit worden gedupliceerd, maakt u een unieke beperking of index voor die kolommen:
alter table users_settings add constraint unq_users_settings_user_id_key
unique (user_id, key);
Vervolgens kunt u het invoegen van de rijen overslaan met 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);
De update
doet niets, omdat de waarde hetzelfde is. MySQL slaat het invoegen over en geeft geen foutmelding.