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
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
2条答案
按热度按时间9wbgstp71#
编辑
根据你的评论,试试这个:
jtw3ybtb2#
我认为这种语法将达到您试图指定的结果。
这里的“诀窍”是我们更新所有四列,但在某些“情况”下,我们将列的当前值赋回到列,导致列值没有实际更改(一旦你把心思集中在这个想法上,就很容易了。)
在mysql中,我们确实有一个方便的if函数(在大多数其他rdbms中不可用),我们可以使用它来简化它,并实现相同的功能:
痛苦的是你仍然要重复同样的条件测试多次。
对表格进行一次扫描(就像这些语句所做的那样),一下子完成所有这些任务将比分解这些任务并使用多个语句逐段完成任务更快(更高效)。