我知道我可以做类似的事情
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
但是,由于我每次都执行完全相同的条件检查,因此肯定有一种更简洁的方式来编写此代码吗?在条件写的时间更长的情况下,这将特别好。
从我阅读的内容来看,如果我为此编写了一个函数,似乎可行,但是我可以在一个普通的旧查询中做到吗?
答案 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)