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 なしで列を更新しており、条件が 2 つのシナリオでのみ値を設定しているためです。残りについては、入力なしでゼロを想定していると思います。私はこれがうまくいくと思います:

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

まず、case ステートメントには、数値 (4-1) と文字列値 '4' があります。デフォルトの case ステートメントはないため、cat_order がテーブル db の数値フィールドである場合は、デフォルト値を確認してください。それは 0 でなければならないので、ゼロはテーブル db 列のデフォルト値から来ており、case ステートメントとは関係ありません。

于 2013-01-29T23:57:48.607 に答える