Mysql Query使用WHEN,AND更新多个条件的多个列

时间:2014-09-05 02:15:29

标签: php mysql

我正在使用2个条件将sql UPDATE写入2列。在我运行sql之前,sender_del_flag和receiver_del_flag都是0但是在我运行之后,一些值返回null。我想知道为什么它变成了null。如何解决这个问题?

   UPDATE `messages` SET 
        receiver_del_flag = CASE 
            WHEN `id`='4' AND receiver='92' THEN '1' 
            WHEN `id`='6' AND receiver='92' THEN '1' 
            WHEN `id`='8' AND receiver='92' THEN '1' 
        END, 
        sender_del_flag = CASE 
            WHEN `id`='4' AND sender='92' THEN '1' 
            WHEN `id`='6' AND sender='92' THEN '1' 
            WHEN `id`='8' AND sender='92' THEN '1' 
        END 
    WHERE id IN ('4', '6', '8')

enter image description here

1 个答案:

答案 0 :(得分:5)

这解决了问题:

   UPDATE `messages` SET 
        receiver_del_flag = CASE 
            WHEN `id`='4' AND receiver='92' THEN '1' 
            WHEN `id`='6' AND receiver='92' THEN '1' 
            WHEN `id`='8' AND receiver='92' THEN '1' 
            ELSE receiver_del_flag
        END, 
        sender_del_flag = CASE 
            WHEN `id`='4' AND sender='92' THEN '1' 
            WHEN `id`='6' AND sender='92' THEN '1' 
            WHEN `id`='8' AND sender='92' THEN '1' 
            ELSE sender_del_flag
        END 
    WHERE id IN ('4', '6', '8');

您的where子句正在获取senderreceiver92的行。这些设置正确。它也会获得值不是92的行。这些设置为NULL,因为没有ELSE子句。