SQL Case语句为某些设置为NULL

时间:2012-12-22 22:55:42

标签: mysql sql case

您好我注意到我的SQL case语句不正确,并且为ids 1-3设置字段Age为NULL。我怎么能阻止这种情况发生?

由于

UPDATE table 
SET `Name` = CASE `id`
               WHEN 1 THEN 'Sam'  
               WHEN 2 THEN 'Adam'  
               WHEN 3 THEN 'James'  
               WHEN 4 THEN 'Chris'
             END, 
    `Age` = CASE `id` 
               WHEN 4 THEN '22'
            END  
WHERE `id` IN (1,2,3,4)

3 个答案:

答案 0 :(得分:4)

ELSE Age添加到您的案例表达式中:

`Age` = CASE `id` WHEN 4 THEN '22' ELSE `Age` END
--                                 ^^^^^^^^^^

这会导致年龄恢复到原始值。

完整查询如下所示:

UPDATE `table`
SET `Name` = CASE `id`
                 WHEN 1 THEN 'Sam' 
                 WHEN 2 THEN 'Adam'
                 WHEN 3 THEN 'James'
                 WHEN 4 THEN 'Chris'
             END,
    `Age`  = CASE `id`
                 WHEN 4 THEN '22'
                 ELSE `Age`
             END
WHERE `id` IN (1,2,3,4)

答案 1 :(得分:2)

我想你想要这个:

UPDATE table 
SET `Name` = 
    CASE `id` 
        WHEN 1 THEN 'Sam'  
        WHEN 2 THEN 'Adam'  
        WHEN 3 THEN 'James'  
        WHEN 4 THEN 'Chris'  
    END, 
    `Age` = 
    CASE `id` 
        WHEN 4 THEN '22' 
        ELSE Age 
    END  
WHERE `id` IN (1,2,3,4)

没有对此进行测试,但它应该有效。

答案 2 :(得分:0)

你需要为1 - 3添加一个WHEN ...那么否则它不会分配任何东西。或者添加其他内容。