仅在满足一个条件的情况下,ON DUPLICATE KEY UPDATE的Terser语法?

时间:2020-04-23 08:06:10

标签: mysql sql sql-update sql-insert on-duplicate-key

我知道我可以做类似的事情

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

但是,由于我每次都执行完全相同的条件检查,因此肯定有一种更简洁的方式来编写此代码吗?在条件写的时间更长的情况下,这将特别好。

从我阅读的内容来看,如果我为此编写了一个函数,似乎可行,但是我可以在一个普通的旧查询中做到吗?

1 个答案:

答案 0 :(得分:0)

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

但是,如果条件很长,一个诀窍是利用用户变量来保存其返回值,您可以在以下分配中重复使用该变量:

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)