mysql - 在更新语句中设置变量值

标签 mysql sql select sql-update

我有以下存储过程

DELIMITER $$

USE `vanter`$$

DROP PROCEDURE IF EXISTS `updateItemQuantity`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `updateItemQuantity`(IN _quantity DOUBLE, IN _puCost DOUBLE, IN _itemState INT, IN _itemId LONG, IN _dateTime DATETIME)
BEGIN


SELECT @PUCOST := PU_COST FROM itemmanagement WHERE id=_itemId;

UPDATE itemmanagement  SET QUANTITY =QUANTITY+_quantity
WHERE id=_itemId;

INSERT INTO item_management_detail( DATE_TIME, ITEM_DETAIL_STATE, FK_ITEM, PU_COST, QUANTITY)
VALUES (_dateTime, _itemState, _itemId, @PUCOST, _quantity);    
END$$

DELIMITER ;

我有两个以下语句在数据库中命中两次

SELECT @PUCOST := PU_COST FROM itemmanagement WHERE id=_itemId;

UPDATE itemmanagement  SET QUANTITY =QUANTITY+_quantity
WHERE id=_itemId;

我想在更新语句中将值赋给@PUCOST,如下,有解决办法吗?

UPDATE itemmanagement  SET QUANTITY =QUANTITY+_quantity , @PUCOST := PU_COST
WHERE id=_itemId;

最佳答案

您可以使用案例:

UPDATE itemmanagement 
    SET QUANTITY = (CASE WHEN (@PUCOST := PU_COST) = NULL THEN NULL -- never get here
                         ELSE QUANTITY + _quantity
                    END)
WHERE id = _itemId;

关于mysql - 在更新语句中设置变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33026488/

相关文章:

mysql - 如何过滤 MySQL 结果以在每个用户的基础上显示 LIMIT 1?

mysql - 数据库规范化用户和消息数据库

mysql - sql : searching for a table, 和在表中搜索数据哪个更快?

javascript - knockout : nested dependentObservable - not functioning

mysql查询-记录在另一个记录中

javascript - 印地语文本在网页上正确显示,但在 mysql 数据库中插入错误

sql - 在 FROM 子查询中描述

sql - 使用插入语句触发

html - 有没有办法在 css 中选择一个打开的选择框?

php - 在 Select MSQL 查询中使用 PHP 变量并返回错误