不适用于更新语句的情况

Posted

技术标签:

【中文标题】不适用于更新语句的情况【英文标题】:case when wont work with update statement 【发布时间】:2020-04-27 01:15:48 【问题描述】:

对于我的 mysql 查询,

update Products
set new_price = (
case when change_date>'2019-08-16' then new_price=100 else new_price end
)
;

更新语句将新价格设置为 0。为什么?

表格详情:

insert into Products (product_id, new_price, change_date) values ('1', '20', '2019-08-14');
insert into Products (product_id, new_price, change_date) values ('2', '50', '2019-08-14');
insert into Products (product_id, new_price, change_date) values ('1', '30', '2019-08-15');
insert into Products (product_id, new_price, change_date) values ('1', '35', '2019-08-16');
insert into Products (product_id, new_price, change_date) values ('2', '65', '2019-08-17');
insert into Products (product_id, new_price, change_date) values ('3', '20', '2019-08-18');
select * from Products;

【问题讨论】:

这些答案之一是否解决了您的问题?如果没有,您能否提供更多信息来帮助回答?否则,请考虑标记最能解决您的问题的答案(上/下投票箭头下的复选标记)。见What should I do when someone answers my question? 和How does accepting an answer work? 【参考方案1】:

您正在尝试将new_price 设置为布尔表达式new_price=100 的结果,除非new_price 已经具有值100,否则它将是0。只需删除new_price=,代码就可以正常工作:

update Products
set new_price = case when change_date>'2019-08-16' then 100
                     else new_price
                end

Demo on dbfiddle

【讨论】:

【参考方案2】:

它将值设置为零,因为new_price = 100 是一个布尔表达式——其计算结果为 0 或 1。

如果这就是你所做的一切,你应该在where 子句中过滤:

update Products
    set new_price = 100
    where change_date > '2019-08-16';

【讨论】:

以上是关于不适用于更新语句的情况的主要内容,如果未能解决你的问题,请参考以下文章

Php pdo rollBack() 不适用于更新语句

虚拟主机不适用于安装 macOS Sierra

SQL case 语句不适用于多参数 pentaho cde

HSQLDB - 可更新语句不适用于“SELECT TOP”或“ORDER BY”

jquery用户输入大写不适用于某些情况

KNN 分类器算法不适用于所有情况