在MySQL Query中遇到CASE子句的问题

时间:2013-01-29 23:51:16

标签: mysql case

UPDATE main_cats set cat_order=(
    CASE         
         when cat_order='4' THEN (4-1) 
         WHEN cat_order=(4-1) THEN '4'
    END)

当我对底部数据运行上述查询时,我得到了。

cat_id  cat_name     cat_order cat_visible
 0      NO MAIN CAT  0           N
 5      CLOTHES      1           N
 6      GIFTS        2           N
 7      ARTWORK      3           Y
 8      TEST CATEGO  4           N

我最终得到了

cat_id  cat_name     cat_order cat_visible
 0      NO MAIN CAT  0           N
 5      CLOTHES      0           N
 6      GIFTS        0           N 
 7      ARTWORK      3           Y
 8      TEST CATEGO  3           N

不确定其他人为何在CASE声明中转到ZERO。

2 个答案:

答案 0 :(得分:1)

这是因为您在没有where的情况下更新列,并且您的条件仅在两个场景中设置值。对于其他人,我猜它假定零,没有输入。我认为这可行:

UPDATE main_cats set cat_order=(
CASE         
     when cat_order='4' THEN (4-1) 
     WHEN cat_order=(4-1) THEN '4'
     ELSE cat_order
END)

答案 1 :(得分:0)

首先,在你的case语句中,你有数字(4-1)和字符串值' 4'。 没有默认的case语句,因此如果cat_order是表db中的numeric字段,请检查默认值。它必须是0,所以零来自表db列的默认值,它与你的case语句无关。