0

MySQL で case を使用してこの update ステートメントを試していますが、値は変更されません。

クエリでエラーは発生しませんが、影響を受ける行はありません。

UPDATE `tablename`
SET `type` = (
    CASE
        WHEN `type` = 1 THEN 1
        WHEN `type` = 2 THEN 2
        WHEN `type` = 3 THEN 19
        WHEN `type` = 4 THEN null
        WHEN `type` = 5 THEN null
        WHEN `type` = 6 THEN 81
        WHEN `type` = 7 THEN null
        WHEN `type` = 8 THEN 22
        WHEN `type` = 9 THEN 21
        WHEN `type` = 10 THEN 78
        WHEN `type` = 11 THEN 80
        WHEN `type` = 12 THEN 79
    END)
WHERE user_id IS NOT NULL;

誰でもこれを修正する方法を知っています。

4

3 に答える 3

0

typeの後に移動してみてくださいCase

UPDATE `tablename`
SET `type` = 
    CASE `type`
        WHEN  1 THEN 1
        WHEN  2 THEN 2
        WHEN  3 THEN 19
        WHEN  4 THEN null
        WHEN  5 THEN null
        WHEN  6 THEN 81
        WHEN  7 THEN null
        WHEN  8 THEN 22
        WHEN  9 THEN 21
        WHEN  10 THEN 78
        WHEN  11 THEN 80
        WHEN  12 THEN 79
    END
WHERE user_id IS NOT NULL;
于 2012-08-06T09:06:53.347 に答える
0
UPDATE test 
SET `password` = (
CASE
    WHEN `password` = 1 THEN 'one'
    WHEN `password` = 2 THEN 'two'
    WHEN `password` = 3 THEN 'three'
    WHEN `password` = 4 THEN null
    WHEN `password` = 5 THEN null
    WHEN `password` = 6 THEN 81
    WHEN `password` = 7 THEN null
END)
where userindex=1

私にとっては完全に正常に動作しています。テストデータに合わせて操作しました。親切に値を再操作して、もう一度試してください。

nullでないuser_idを持つユーザーがいるかどうかも確認してください

于 2012-08-06T09:17:57.787 に答える
0

クエリは問題ないようです。選択を使用して、レコードが返されるかどうかを試すことをお勧めします。

SELECT *, CASE
        WHEN `type` = 1 THEN 1
        WHEN `type` = 2 THEN 2
        WHEN `type` = 3 THEN 19
        WHEN `type` = 4 THEN null
        WHEN `type` = 5 THEN null
        WHEN `type` = 6 THEN 81
        WHEN `type` = 7 THEN null
        WHEN `type` = 8 THEN 22
        WHEN `type` = 9 THEN 21
        WHEN `type` = 10 THEN 78
        WHEN `type` = 11 THEN 80
        WHEN `type` = 12 THEN 79
    END as test 
FROM `tablename` WHERE user_id IS NOT NULL
于 2012-08-06T09:22:22.297 に答える