sql >> Databasteknik >  >> RDS >> Mysql

Hur kontrollerar man befintlig post innan man infogar post för varje användare i samma tabell?

En metod använder helt enkelt villkorlig 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 kanske vill ha en mer generisk lösning. Om du vill säkerställa att användar/nyckelpar aldrig dupliceras, skapa då en unik begränsning eller index på dessa kolumner:

alter table users_settings add constraint unq_users_settings_user_id_key
    unique (user_id, key);

Sedan kan du hoppa över att infoga raderna med 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, eftersom värdet är detsamma. MySQL hoppar över infogningen och returnerar inget fel.




  1. Hur man hittar låsta rader i Oracle

  2. Gruppvis maximalt

  3. Hur man kontrollerar Oracle-databasen för långvariga frågor

  4. Hur reparerar man ett skadat MPTT-träd (kapslat set) i databasen med SQL?