通过以下查询,我只想在ConcurrentJobs列中的值是MaxConcurrentJobs要更新的greater than or equal to值时更新ConcurrentJobs列。

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。这可能是什么原因?查询在哪里失败?

最佳答案

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)。为此逻辑使用触发器。

10-04 21:45