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

Rya*_*yan 2 mysql sql-update

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

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

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

| 1 | Joe | Smith | null | X | X | X | Y | X | Y | Y | X | null | Y | X | null |
Run Code Online (Sandbox Code Playgroud)

是否有可能更新匹配所有的字段XY一次?

所以结果看起来像这样:

| 1 | Joe | Smith | null | Y | Y | Y | Y | Y | Y | Y | Y | null | Y | Y | null |
Run Code Online (Sandbox Code Playgroud)

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

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

Boh*_*ian 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 = ?;
Run Code Online (Sandbox Code Playgroud)

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