语法错误更新案例mysql

Syntax error update case mysql

我正在尝试更新我的数据库中的 table,我环顾四周,但似乎无法正常工作。

我想要实现的是更新 table 中的 "quantity" 列。

如果数量 > 0 则数量 - xxx 值 如果数量 < 0,则将状态列设置为 0

这是我的代码:

CREATE DEFINER=`root`@`localhost` PROCEDURE `update_quantity`(IN iarticleid varchar(45), IN iquantity int(11))
BEGIN
UPDATE product_varities set product_varities.quantity = CASE
WHEN product_varities.quantity > 0 Then product_varities.quantity = product_varities.quantity - iquantity
WHEN product_varities.quantity < 0 THEN product_varities.`status` = 0
WHERE product_varities.article_id = iarticleid;
END CASE;
END

MySQL Workbench 中显示的当前错误消息: 第 5 行 - 缺少语法错误 'end' 第 7 行 - 缺少语法错误 'end'

如您所见,我已经放置了 "end",我不确定我做错了什么。有人能指出我正确的方向吗?谢谢

我认为您正试图在表达式内部进行流控制,但这不是实现它的方法。

我认为这样做会更好:

CREATE PROCEDURE `update_quantity`(IN iarticleid varchar(45), IN iquantity int(11))
BEGIN
    update product_varities
    set quantity = quantity - iquantity
    where article_id = iarticleid and quantity > 0;

    update product_varities
    set status = 0
    where article_id = iarticleid and quantity < 0;
END

如果您愿意,您可以将其写成一个 update

UPDATE product_varities pv
    SET pv.quantity = (CASE WHEN pv.quantity > 0 THEN pv.quantity - iquantity
                            ELSE pv.quantity END),
        pv.status = (CASE WHEN pv.quantity < 0 THEN 0 ELSE pv.status)
    WHERE pv.article_id = iarticleid;