如何更新匹配`x`到'y`的行中的所有字段而不单独循环遍历每个字段?

时间:2012-11-01 04:04:13

标签: mysql sql-update

我很好奇我是否可以在MySQL中一次更新一行中的所有匹配字段。

我知道我可以使用ALTER TABLE来更改默认值,但我只对一行感兴趣,而不是更改整个表的默认值。如果有必要,我可以循环遍历每个循环,但我很好奇是否有办法更优雅地完成这一任务。

想象一下,我的行看起来像这样:

| 1 | Joe | Smith | null | X | X | X | Y | X | Y | Y | X | null | Y | X | null |

是否可以立即将XY匹配的所有字段更新?

所以结果看起来像这样:

| 1 | Joe | Smith | null | Y | Y | Y | Y | Y | Y | Y | Y | null | Y | Y | null |

(假设1是主键,id ...如果这有帮助的话)

这只能通过一次UPDATE查询完成吗?

1 个答案:

答案 0 :(得分:5)

如果它们是'x',这会将所有列的值更改为'y',否则保持不变。

update mytable set
col1 = if(col1 = 'x', 'y', col1),
col2 = if(col2 = 'x', 'y', col2),
col3 = if(col3 = 'x', 'y', col3),
...
where id = ?;

实际上,它将其更新为原始值,但在语义上与保持不变相同,并且在mysql中是相同的(即它不以任何方式计为“更新”)