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。
答案 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语句无关。