繁体   English   中英

根据其新值在更新查询期间更新另一列

[英]Update another column during a update query based on its new value

我有一个名为item_quantity的表,其中包含2个字段,数量和要求。 我有一个查询,它将在每次客户购买时更新字段数量。 问题是我要在数量变为0时将请求的列更新为0。这是我到目前为止尝试过的。

UPDATE `item_quantity`SET `quantity`=quantity-5,`requested`= CASE when `quantity` = 0 then 0 else 1 end where `item_id`=1;

但此案以红色强调。 我不知道它的语法还是逻辑错误。 我该怎么做? 先感谢您! [这就是我得到的] 1

设置item_quantity后,可以执行请求的更新。 然后,您可以像这样直接比较item_quantity:

UPDATE `item_quantity`
SET
  `quantity`= `quantity` - 5
  ,`requested`= IF(`quantity` = 0, 0, `requested`);

样品

mysql> SELECT * FROM item_quantity;
+----+----------+-----------+
| id | quantity | requested |
+----+----------+-----------+
|  1 |       10 |         9 |
+----+----------+-----------+
1 row in set (0,00 sec)

mysql> UPDATE `item_quantity`
    -> SET
    ->   `quantity`= `quantity` - 5
    ->   ,`requested`= IF(`quantity` = 0, 0, `requested`);
Query OK, 1 row affected (0,00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM item_quantity;
+----+----------+-----------+
| id | quantity | requested |
+----+----------+-----------+
|  1 |        5 |         9 |
+----+----------+-----------+
1 row in set (0,00 sec)

mysql> UPDATE `item_quantity`
    -> SET
    ->   `quantity`= `quantity` - 5
    ->   ,`requested`= IF(`quantity` = 0, 0, `requested`);
Query OK, 1 row affected (0,00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> SELECT * FROM item_quantity;
+----+----------+-----------+
| id | quantity | requested |
+----+----------+-----------+
|  1 |        0 |         0 |
+----+----------+-----------+
1 row in set (0,00 sec)

mysql>

您可以使用BEFORE UPDATE触发器。 该触发器将在更新执行之前触发,您可以更新其他字段。 请尝试以下操作:

CREATE TRIGGER item_quantity_before_update
BEFORE UPDATE
   ON item_quantity FOR EACH ROW
BEGIN
   DECLARE old_quantity NUMBER;
   DECLARE new_quantity NUMBER;

   SELECT quantity INTO old_quantity;

   SET new_quantity = old_quantity - 5;
   IF new_quantity == 0 THEN
      SET new.requested = 0
   ELSE
      SET new.requested = 1;
   END IF;
END; //

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM