sql >> Database >  >> RDS >> Mysql

Hoe een bestaand record te controleren voordat het record voor elke gebruiker in dezelfde tabel wordt ingevoegd?

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.




  1. Top 30 SQL Query-interviewvragen die u moet oefenen in 2022

  2. Geef elke DISTINCT-veldwaarde slechts één keer weer met lus

  3. Waar/Onwaar versus 0/1 in MySQL

  4. Laatst ingevoegde waarde ophalen in Yii