0

次のクエリを使用して、列の値が更新される値でConcurrentJobsある場合にのみ、列を更新したいと考えています。MaxConcurrentJobsgreater than or equal toConcurrentJobs

insert into userjobinfo (UserId,ConcurrentJobs) values (335,2300)
            on duplicate key update ConcurrentJobs = case when values(MaxConcurrentJobs) >= ConcurrentJobs
                                    then ConcurrentJobs else values(ConcurrentJobs) end;

しかし、上記のクエリは期待どおりに機能しません。条件が失敗した場合でも2300、列の値は常に更新されます。concurrent jobsこの理由は何でしょうか?クエリが失敗する場所

4

2 に答える 2

0

ON DUPLICATE KEY UPDATE 句の ..VALUES(col_name) は、重複キーの競合が発生しなかった場合に挿入される col_name の値を参照します。VALUES() 関数は INSERT ... UPDATE ステートメントでのみ意味があり、それ以外の場合は NULL を返します http://dev.mysql.com/doc/refman/5.7/en/insert-on-duplicate.html

values(MaxConcurrentJobs)は挿入していない列を参照しているため、NULL であるため、条件は常にデフォルトになります 。values(ConcurrentJobs)そのロジックにはトリガーを使用します。

于 2016-12-09T09:06:53.007 に答える