仅当一个条件为真时,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)
我知道我可以做类似
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)