【发布时间】:2015-03-24 10:25:46
【问题描述】:
我正在尝试完成 MySQL 更新,这应该很容易,当查询运行时,如果值为 0,则将其设置为 1,如果为 1,则将其设置为 0。
update agents set manual_import = 0 if manual_import =1,set manual_import = 1 if manual_import = 1
上面有很多例子,但哪一个最简单?
【问题讨论】:
标签: mysql
我正在尝试完成 MySQL 更新,这应该很容易,当查询运行时,如果值为 0,则将其设置为 1,如果为 1,则将其设置为 0。
update agents set manual_import = 0 if manual_import =1,set manual_import = 1 if manual_import = 1
上面有很多例子,但哪一个最简单?
【问题讨论】:
标签: mysql
一些数学知识会有所帮助:
UPDATE agents
SET manual_import = 1 - manual_import # turn 1 to 0 and 0 to 1
WHERE manual_import IN (0, 1) # but only when the value is 0 or 1
【讨论】:
好的,我发现这适用于我自己的问题和任何其他类似的简单查询。
UPDATE agents SET manual_import = CASE
WHEN manual_import = 1 THEN 0
WHEN manual_import = 0 THEN 1
END
WHERE a_id = $a_id
【讨论】:
manual_import 不只是取值 0 和 1,此命令会将任何其他值设置为 NULL。
你可以尝试使用 case when then
update agents set
manual_import = case when manual_import = 1 then 0 else 1
end
我假设 manual_import 只有两个值 0 和 1,如果它不止 1 和 0,那么试试这个:
UPDATE agents SET manual_import = case
when manual_import = 1 then 0
when manual_import = 0 then 1 else manual_import
END
【讨论】:
在 oracle 数据库中,最简单的方法是“解码”功能。正如this 问题中的回答,您可以使用以下“如果”:
update agents set manual_import = if(manual_import=1,0,1)
【讨论】:
manual_import 接受的不仅仅是值 0 和 1,那么所有不是 1(而不仅仅是 0)的值都将变为 1。