仅当一个条件为真时,ON DUPLICATE KEY UPDATE 的简洁语法?

Terser syntax for ON DUPLICATE KEY UPDATE only if one condition is true?

我知道我可以做类似

ON DUPLICATE KEY UPDATE 
    exampleColumn1 = IF (exampleCondition = 1, VALUES(exampleColumn1), exampleColumn1),
    exampleColumn2 = IF (exampleCondition = 1, VALUES(exampleColumn2), exampleColumn2),
    exampleColumn3 = IF (exampleCondition = 1, VALUES(exampleColumn3), exampleColumn3),
    # Etc etc

但是因为我每次都在做完全相同的条件检查,所以肯定有更简洁的方式来写这个?在条件写出时间稍长的情况下,这会特别好。

据我所知,如果我为此编写一个函数似乎是可行的,但我可以在普通的旧查询中完成吗?

简而言之:没有。 on duplicate key 语法不支持任何形式的过滤(where 条件或类似条件)。

但是,如果你的条件很长,一个技巧是使用用户变量来保存它的 return 值,你可以在以下赋值中重复使用它:

on duplicate key update
    exampleColumn1 = if(@do_update := (exampleCondition = 1), values(exampleColumn1), exampleColumn1),
    exampleColumn2 = if(@do_update, values(exampleColumn2), exampleColumn2),
    exampleColumn3 = if(@do_update, values(exampleColumn3), exampleColumn3)