我的UPDATE CASE查询出了什么问题?

时间:2014-07-01 06:57:07

标签: mysql

我的Mysql是mysql Ver 14.14 Distrib 5.1.69, for redhat-linux-gnu (x86_64) using readline 5.1,我有很多更新,比如

update player set playorder = 1 where id = 4;
update player set playorder = 2 where id = 5;
update player set playorder = 3 where id = 1;
....

我把它们放在一个UPDATE

update player set playorder = (CASE
 when id = 4 then 1 
 when id = 5 then 2 
 when id = 1 then 3 END);

我发现id = 5 playorder是1,我无法弄清问题是什么。谢谢你的帮助。

我的问题的第一句是我的盒子上关于MySQL的版本。如果SQL fiddle上的所有实验都在版本5.1.xx上,那么情况会更好。当我在我的盒子上将MySQL更新到5.5.xx时,奇怪的结果消失了。所以我认为这是导致UPDATE CASE句子失败的错误。我无法在站点SQL小提琴上构建版本5.1.xx上的架构。我希望有人可以做到。

1 个答案:

答案 0 :(得分:1)

根据MySQL Control Flow Functions

  

第一个版本返回value=compare_value的结果。该   第二个版本返回第一个条件的结果   真正。如果没有匹配的结果值,则ELSE之后的结果   如果没有NULL部分,则返回,或ELSE

试试这个

 Update player 
   Set playorder = Case When id = 4 Then 1 
                        When id = 5 Then 2 
                        When id = 1 Then 3 
                   Else Null 
                   END