mysql - MYSQL CASE 表达式可以在相同的 WHEN 条件下运行良好吗?

标签 mysql

如您所见:

UPDATE activity
SET number = CASE
WHEN aid = 45 THEN
    number + 1 
WHEN aid = 43 THEN
    number + 1 
END
WHERE
    aid IN (45, 43)

此查询运行良好。 但是:

UPDATE activity
SET number = CASE
WHEN aid = 45 THEN
    number + 1 
WHEN aid = 43 THEN
    number + 1 
WHEN aid = 45 THEN
    number + 3
WHEN aid = 49 THEN
    number + 1
END
WHERE
    aid IN (45, 43,49)

查询有问题。第二个“WHEN aid=45...”不起作用。结果是当aid=45时数字增加1,但我希望数字增加4。

感谢您的回答。但我认为我的问题描述得很简单。所以,也许我应该详细描述一下。 我的 PHP 代码用于更新不同事件的数量。辅助是主键。

/*
$aids is an array which the key is the activity's primary key and the 
value is the activity's number.
example $aids = array('45'=>4,'43'=>1...)
In the array,i combine all the same aid to one element.so one aid can 
not be used twice by the case expression.And  all the number are total
number.
*/
$sql = 'update huodong_activity set applynumber = case ';
$aids_str = implode(',',array_keys($aids)); 
foreach($aids as $k=>$v){
      $sql .= sprintf(' when aid = %d then applynumber-%d',$k,$v);
}
$sql .= ' END WHERE aid IN ('.$aids_str.') ';
$db->query($sql);

我的问题是:

1.我真的不知道为什么 case 表达式在“aid=45”使用两次或更多次时不起作用?

2.我不知道“更新案例表达式”或任何限制可以更新多少行?

最佳答案

第二个版本将不起作用,因为 case 表达式将匹配前 45 个,然后停止。如果您想将其增加 4,只需删除 WHEN acid = 45 THEN number + 1 并将第二个更改为 WHEN aid = 45 THEN number + 4,如下所示:

UPDATE activity
SET number = CASE
WHEN aid IN (43, 49) THEN
    number + 1 
WHEN aid = 45 THEN
    number + 4
END
WHERE
    aid IN (45, 43, 49)

关于mysql - MYSQL CASE 表达式可以在相同的 WHEN 条件下运行良好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29205842/

相关文章:

mysql - 在 loopback.io 中进行连接查询

php - UNIX 时间戳和 MYSQL

java - 将 MySql Decimal 映射到 Java

MySQL 工作台 : "Can' t connect to MySQL server on 127. 0.0。 1' (10061)"错误

javascript倒计时和更新数据库php

mysql - 将多个 "attributes"添加到 MySQL 数据库中的身份的最有效方法

php - SELECT ... LIMIT 0,1 语法错误

PHP HTML 表单保留输入的数据和 isset()

mysql - 定位并删除 mysql 表中的元素

mysql - 我正在尝试计算具有不同电话号码和 LTV 的州的数量