当前位置: 首页 > 面试题库 >

MySQL更新CASE WHEN / THEN / ELSE [重复]

岳意蕴
2023-03-14
问题内容

这个问题已经在这里有了答案

MySQL更新案例帮助 (6个答案)

6年前关闭。

我正在尝试使用CLI脚本更新LARGE MyISAM表(2500万条记录)。该表没有被其他任何东西锁定/使用。

我想而不是对每个记录执行单个UPDATE查询,我不妨利用CASE功能。

id字段为PRIMARY。我怀疑以下查询应花费毫秒。

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    END

瞧,查询占用了CPU,并且永远无法完成。

然后,令我惊讶的是,我发现查询正在更新所有2500万行,在我未指定的行上放置NULL。

目的是什么?我可以只对特定的行进行MASS更新,而不必每次执行此查询时都更新2500万行吗?还是我必须先进行个别更新然后提交?


问题答案:

尝试这个

UPDATE `table` SET `uid` = CASE
    WHEN id = 1 THEN 2952
    WHEN id = 2 THEN 4925
    WHEN id = 3 THEN 1592
    ELSE `uid`
    END
WHERE id  in (1,2,3)


 类似资料:
  • if-then语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) if-then-else语句的语法是 - if condition then S1 else S2; 其中, S1和S2是不同的陈述。 Please note that the statement S1 is not followed by a semicolon 。 在if-th

  • If语句后面可以跟一个可选的Else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) VB.Net中If ... Then ... Else语句的语法如下 - If(boolean_expression)Then 'statement(s) will execute if the Boolean expression is true Else 'statement(

  • 除非后面的语句后面跟一个可选的else语句,该语句在布尔表达式为true时执行。 使用unless-then ... else语句,我们可以在一行中编写除非... else语句。 语法 (Syntax) 以下是CoffeeScript中的unless-then else语句的语法。 unless expression <b>then</b> Statements (for false) else

  • if-then语句后跟一个可选的else语句,该语句在布尔表达式为false时执行。 使用if-then ... else语句,我们可以在一行中编写if ... else语句。 语法 (Syntax) 以下是CoffeeScript中if-then...else语句的语法。 if expression <b>then</b> Statements (for true condition) else

  • if… then语句后面可以跟一个可选的else statement,该else statement,在逻辑表达式为false时执行。 语法 (Syntax)> if… then… else语句的基本语法是 - if (logical expression) then statement(s) else other_statement(s) end if 但是,如果给

  • if/then语句后面可以跟一个可选的else语句,该语句在布尔表达式为false时执行。 语法 (Syntax) F#编程语言中if/then/else语句的语法是 - if expr then expr else expr 流程图 (Flow Diagram) 例子 (Example) let a : int32 = 100 (* check the boolean condit