在将每个用户的记录插入同一个表之前,如何检查现有记录?

6yoyoihd  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(305)

我有一个表,我想为每个用户多存储一个键,下面是表,

我想补充 app_reminder 对于每个现有用户。我是跟着你做的

insert into users_settings (user_id, key)
    select distinct user_id, 'app_reminder'
    from users_settings;

现在我想添加where子句 SELECT DISTINCT user_id, 'app_reminder' WHERE key != 'app_reminder' 用于防止重复条目。我试过上面的一个,但不起作用。
如果有人能给我指点一下,我将不胜感激。
谢谢您

yizd12fk

yizd12fk1#

一种方法只是使用条件聚合:

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跳过插入操作,不返回错误。

相关问题