3

我要做的是在一个非常简单的 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;

任何帮助表示赞赏:)

4

2 回答 2

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;

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

于 2013-02-28T12:59:13.533 回答
1

要处理任何 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;
于 2020-09-03T01:55:23.780 回答