仅当一个条件为true时,ON DUPLICATE KEY UPDATE的Terser语法



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

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条件或类似条件(。

然而,如果您的条件很长,一个技巧是使用用户变量来保持其返回值,您可以在以下分配中重用该值:

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)

最新更新