通过以下查询,我希望仅当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
。这可能是什么原因?查询在哪里失败?
答案 0 :(得分: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)
。使用该逻辑的触发器。
答案 1 :(得分:0)
您不需要使用VALUES()
引用行中已有的列;这是INSERT
提供的 new 值。我认为以下内容应该有效:
insert into userjobinfo (UserId,ConcurrentJobs)
values (335, 2300)
on duplicate key update
ConcurrentJobs = (case when MaxConcurrentJobs >= VALUES(ConcurrentJobs)
then VALUES(ConcurrentJobs)
else ConcurrentJobs
end);