sql >> データベース >  >> RDS >> Mysql

各ユーザーのレコードを同じテーブルに挿入する前に、既存のレコードを確認するにはどうすればよいですか?

    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は挿入の実行をスキップし、エラーを返しません。




    1. テーブル名を変更するHibernateの命名戦略

    2. SQLServer2017のインストール

    3. 掲示板-データベースの最適化

    4. MySQL RADIANS()関数–度からラジアンに変換