根据条件更新查询

时间:2012-07-13 21:05:32

标签: mysql sql conditional-statements

我想做以下事情。 根据

等其他字段的值更新字段
update table set if(fielda=1){fieldb=2 fieldc=3}else{fieldd=2 fielde=3}

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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)

痛苦的是你仍然需要多次重复相同的条件测试。

通过表格进行单次扫描(就像这些语句一样),并且一举完成所有这些分配将比打破这个并使用多个语句零碎地完成任务更快(更有效)。 / p>