MYSQL WHEN CASE那么什么都不做

时间:2013-02-28 12:57:47

标签: mysql

我要做的是在一个非常简单的3列数据库中设置一些字段,我用它来管理一些复选框。

如果id在列表中,我想将col_2设置为1,保持col_3状态不变。但如果id不在列表中,则将col_2和col_3设置为0。

这是我到目前为止,它不起作用,因为它给了我一些警告并改变了col_3的值:

UPDATE t 
SET col_2 =
 CASE         
    WHEN id IN (list) THEN 1
    WHEN id NOT IN (list) THEN  0
 END,
col_3 = 
 CASE
    WHEN id NOT IN (list) THEN 0
 END
WHERE id IS NOT NULL;

任何帮助表示赞赏:)

2 个答案:

答案 0 :(得分:5)

这是如何让col_3保持不变

UPDATE t 
SET col_2 =
 CASE         
    WHEN id IN (list) THEN 1
    WHEN id NOT IN (list) THEN  0
 END,
col_3 = 
 CASE
    WHEN id NOT IN (list) THEN 0
    ELSE col_3 --this
 END
WHERE id IS NOT NULL;

至于你的警告,我们没有足够的信息

答案 1 :(得分:0)

要处理任何WHEN子句不匹配任何值的情况,请使用包含空BEGIN ... END块的ELSE,如本示例所示。 (在ELSE子句中使用的缩进仅是为了清楚起见,在其他方面并不重要。)

DELIMITER |

CREATE PROCEDURE p()
  BEGIN
    DECLARE v INT DEFAULT 1;

    CASE v
      WHEN 2 THEN SELECT v;
      WHEN 3 THEN SELECT 0;
      ELSE
        BEGIN 
           -- simply put this BEGIN and END for the "do nothing" on ELSE
        END;
    END CASE;
  END;