0

通过以下查询,我只想ConcurrentJobsMaxConcurrentJobs列中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这可能是什么原因?查询在哪里失败?

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).Use a trigger for that logic。

于 2016-12-09T09:06:53.007 回答
0

您不需要使用VALUES();来引用行中已经存在的列。那是由 . 提供的INSERT。我认为以下应该有效:

insert into userjobinfo (UserId,ConcurrentJobs)
    values (335, 2300)
    on duplicate key update
        ConcurrentJobs = (case when MaxConcurrentJobs >= VALUES(ConcurrentJobs)
                               then VALUES(ConcurrentJobs)
                               else ConcurrentJobs
                          end);
于 2016-12-09T11:48:39.127 回答