2

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

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

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

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

是否可以一次更新所有匹配X的字段Y

所以结果看起来像这样:

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

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

这可以只用一个UPDATE查询来完成吗?

4

1 回答 1

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 中是相同的(即它无论如何都不算​​作“更新”)

于 2012-11-01T04:19:51.577 回答