2014-09-05 86 views
1

我正在将2条记录的sql UPDATE写入2条件。在我运行sql之前,sender_del_flag和receiver_del_flag都是0,但是在运行这个之后,有些值返回null。我想知道它为什么变为null。如何解决这个问题?Mysql查询使用WHEN更新多个条件的多列,并且

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

回答

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子句。

+0

非常感谢您节省我的时间 – Khean 2014-09-05 02:19:42

+2

如果您在WHERE子句中添加AND(receiver = '92'或sender = '92'),它也会更有效率。 – Barmar 2014-09-05 02:22:15

+0

好吧,我看到了,但我想我不必补充,因为它已经在WHEN子句 – Khean 2014-09-05 03:29:23