1つの方法は、条件付き集計を使用するだけです。
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;
より一般的なソリューションが必要になる場合があります。ユーザーとキーのペアが重複しないようにする場合は、それらの列に一意の制約またはインデックスを作成します。
alter table users_settings add constraint unq_users_settings_user_id_key
unique (user_id, key);
次に、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
値が同じであるため、何もしません。 MySQLは挿入の実行をスキップし、エラーを返しません。