或者没有在mysql中运行的case语句

时间:2014-07-13 14:05:26

标签: mysql sql sql-update

我有一个查询,其中在case语句中我放了一个或语句。

由于某种原因,or语句没有运行。

示例 -

 update shouts set visibility=(case when (visibility = null or visibility =1) 
 then 2 else 1 end) where shout_id = 788

现在,当可见性为空时,它应该更新2,而没有任何已知原因它将字段更新为1.

2 个答案:

答案 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是解决特定问题的正确方法。