我有一个查询,其中在case语句中我放了一个或语句。
由于某种原因,or语句没有运行。
示例 -
update shouts set visibility=(case when (visibility = null or visibility =1)
then 2 else 1 end) where shout_id = 788
现在,当可见性为空时,它应该更新2,而没有任何已知原因它将字段更新为1.
答案 0 :(得分:2)
与IS
比较时,请使用NULL
运算符。因为在使用普通运算符( true )时,将某些内容与NULL
进行比较会导致 unknown 。
update shouts
set visibility = case when visibility IS null or visibility = 1
then 2
else 1
end
where shout_id = 788
答案 1 :(得分:1)
我想指出你可以简化逻辑:
update shouts
set visibility = (case when visibility <> 1 then 1 else 2 end)
where shout_id = 788;
甚至:
update shouts
set visibility = 2 - (visibility <> 1)
where shout_id = 788;
但是,Juergen是解决特定问题的正确方法。