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

nullでない場合はSQL更新

    caseを使用できます このための式。あなたが望む論理は次のとおりだと思います:

    UPDATE users 
    SET 
        username = Param1
        email = case when email is not null then Param2 end,
        password = case when password is not null then Param3 end
    WHERE id = Param4;
    

    または、両方の場合、メールアドレスとパスワードを更新する場合 nullではありません 次に:

    UPDATE users 
    SET 
        username = Param1
        email = case when email is not null and password is not null then Param2 end,
        password = case when email is not null and password is not null then Param3 end
    WHERE id = Param4;
    

    質問が更新されました。メールとパスワードの両方のパラメータの場合にのみ、更新を実行する必要があることを理解しています。 空の文字列ではありません。したがって、実際にはフィルタリングが必要です。 。私はこれを次のように言います:

    UPDATE users 
    SET username = Param1, email = Param2, password = Param3 
    WHERE id = Param4 and Param2 <> '' and Param3 <> ''
    

    または、両方のパラメータのロジックを分離する場合:

    UPDATE users 
    SET 
        username = Param1, 
        email = case when Param2 <> '' then Param2 else email end, 
        password = case when Param3 <> '' then Param3 else password end
    WHERE id = Param4;
    


    1. 複数列の外部キー:すべてではなく、削除時に単一の列をNullに設定します

    2. MySQL SELECTを使用して仮想列を作成するにはどうすればよいですか?

    3. NOW()を日時データ型のデフォルト値として設定しますか?

    4. 新たに挿入された行のIDをibatisで取得する際の同時実行性の問題