我有一个要求,其中我将获取需要插入到数据库 (MariaDB 10.3
) 表中的记录,其中对于每条记录我有 2 个基值,即。 name
和 amount
以及一个处理后的值即。 action
(想象一下这个action
是用户从UI执行的操作)。
+---------+--------+----------------+----------------+
| name | amount | action | created_at |
+---------+--------+----------------+----------------+
| Akshay | 1000 | processed | 2019-08-01 |
+---------+--------+----------------+----------------+
现在,我想要实现的是,当我下次收到表中已存在的 name
和 amount
记录时,然后填充 action
通过自动引用同一表中 name
和 amount
匹配的上一个条目。
如果表中不存在name
和amount
组合,则不填充action
。
期望的最终结果如下结构所示:
+---------+--------+----------------+----------------+
| name | amount | action | created_at |
+---------+--------+----------------+----------------+
| Akshay | 1000 | processed | 2019-08-04 |
| Akshay | 1001 | | 2019-08-03 |
| Saanvi | 1000 | | 2019-08-02 |
| Akshay | 1000 | processed | 2019-08-01 |
+---------+--------+----------------+----------------+
有什么线索可以帮助我实现此功能吗?
最佳答案
DROP PROCEDURE IF EXISTS db.SP_CREATE_VALUE;
CREATE PROCEDURE db.`SP_CREATE_VALUE`(IN `in_name` VARCHAR(50), IN `in_amount` INT)
BEGIN
DECLARE numAlreadyExists INT(11) DEFAULT 0;
DECLARE strExistingAction VARCHAR(20) DEFAULT "";
SET numAlreadyExists=(SELECT COUNT(*) FROM table_name WHERE name=in_name AND in_amount=in_amount);
IF (numAlreadyExists >0) THEN
SET strExistingAction=(SELECT action FROM table_name WHERE name=in_name AND in_amount=in_amount ORDER BY table_id DESC LIMIT 1);
END IF;
INSERT INTO table_name
name=in_name,amount=in_amount,action=strExistingAction;
END;
然后当您想创建新记录时,只需...
CALL SP_CREATE_VALUE('Akshay',1000);
关于mysql - 如何根据其他列值保留一列的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57319354/