我很好奇我是否可以在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
查询完成吗?
答案 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中是相同的(即它不以任何方式计为“更新”)