基于状态更新查询(Update Query based on condition)

2019-06-26 07:19发布

我想做到以下几点。 更新基于另一个字段的值的字段像

update table set if(fielda=1){fieldb=2 fieldc=3}else{fieldd=2 fielde=3}

我知道这是不是有效的MySQL,但其对我说明问题的最好办法。

Answer 1:

update table set
b = case when a = 1 then 2 else b end,
c = case when a = 1 then 3 else c end,
d = case when a = 1 then d else 2 end,
e = case when a = 1 then e else 3 end

编辑

根据您的评论试试这个:

update table set
datefield_a = case when field_a = 1 then now() else datefield_a end,
datefield_b = case when field_a <> 1 then now() else datefield_b end


Answer 2:

我认为这句法将实现你试图指定的结果。

UPDATE mytable
   SET fieldb = CASE WHEN fielda = 1 THEN 2 ELSE fieldb END
     , fieldc = CASE WHEN fielda = 1 THEN 3 ELSE fieldc END
     , fieldd = CASE WHEN fielda = 1 THEN fieldd ELSE 2 END
     , fielde = CASE WHEN fielda = 1 THEN fielde ELSE 3 END

该“绝招”这里是我们正在更新所有四列,但在一些“情况”,我们正在分配列的当前值回柱,导致对列值没有实质性改变。 (一旦你让你的头脑围绕这一想法弯曲,这是很容易。)

使用MySQL,我们确实有一个方便的IF函数(不提供大多数其他RDBMS),我们可以使用缩写说了一下,并实现同样的事情:

UPDATE mytable
   SET fieldb = IF(fielda = 1, 2, fieldb)
     , fieldc = IF(fielda = 1, 3, fieldc)
     , fieldd = IF(fielda = 1, fieldd, 2)
     , fielde = IF(fielda = 1, fielde, 3)

痛苦的是,你仍然有同样的条件测试多次重复。

一个单一的扫描整个表(如这些语句做),并让所有的一举完成这些任务将是比打破这件事和零碎使用多个语句执行任务更快(更有效)。



文章来源: Update Query based on condition