我要做的是在一个非常简单的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;
任何帮助表示赞赏:)
答案 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;