【问题标题】:What's wrong with my UPDATE CASE query?我的 UPDATE CASE 查询有什么问题?
【发布时间】:2014-07-01 06:57:07
【问题描述】:

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

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 player set playorder = (CASE
 when id = 4 then 1 
 when id = 5 then 2 
 when id = 1 then 3 END);

我发现 id=5 播放顺序是 1,我不知道是什么问题。感谢您的帮助。

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

【问题讨论】:

标签: mysql


【解决方案1】:

根据MySQL Control Flow Functions

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

试试这个

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

【讨论】:

  • playorder 在 id 为 1 的情况下为 null,在 id 为 4 的情况下 playorder 为 null,在 id 为 5 的情况下 playorder 为 1。
  • @Ron 检查您的列 (Id) 值,因为它正在工作 fiddle
  • @Ron 如果 id 列是 Varchar 字段,则检查值周围的 ant 尾随或前导空格
  • 可能是 5.1.69 版本的 bug。 fiddle 的 mysql 是 5.5.32。
  • @Kumar 你能在 5.1.61 上构建架构吗?根据我的 ip,构建速度非常慢。
猜你喜欢
  • 2014-05-29
  • 2014-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 2010-12-23
  • 2010-11-26
相关资源
最近更新 更多