0
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 语句中归零。

4

2 回答 2

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)
于 2013-01-29T23:56:45.273 回答
0

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

于 2013-01-29T23:57:48.607 回答