6

我想做以下事情。根据另一个字段的值更新一个字段,例如

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

我知道这不是有效的 mysql,但它是我描述问题的最佳方式。

4

2 回答 2

8
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
于 2012-07-13T21:15:20.830 回答
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)

痛苦是您仍然必须多次重复相同的条件测试。

对表进行一次扫描(就像这些语句所做的那样),一口气完成所有这些分配将比分解它并使用多个语句零碎地进行分配更快(并且更有效)。

于 2012-07-13T21:16:01.193 回答