Một phương pháp đơn giản chỉ sử dụng kết hợp có điều kiện:
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;
Bạn có thể muốn một giải pháp chung chung hơn. Nếu bạn muốn đảm bảo rằng các cặp khóa / người dùng không bao giờ bị trùng lặp, thì hãy tạo một ràng buộc hoặc chỉ mục duy nhất trên các cột đó:
alter table users_settings add constraint unq_users_settings_user_id_key
unique (user_id, key);
Sau đó, bạn có thể bỏ qua việc chèn các hàng bằng 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);
Bản cập nhật update
không làm gì cả, bởi vì giá trị là như nhau. MySQL bỏ qua việc chèn và không trả lại lỗi.