我的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上的架构。我希望有人可以做到。
答案 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