mysql - 如何根据其他列值保留一列的值?

标签 mysql sql database mariadb relational-database

我有一个要求,其中我将获取需要插入到数据库 (MariaDB 10.3) 表中的记录,其中对于每条记录我有 2 个基值,即。 nameamount 以及一个处理后的值即。 action(想象一下这个action是用户从UI执行的操作)。

+---------+--------+----------------+----------------+
| name    | amount |    action      |  created_at    |
+---------+--------+----------------+----------------+
| Akshay  | 1000   |   processed    |  2019-08-01    |
+---------+--------+----------------+----------------+

现在,我想要实现的是,当我下次收到表中已存在的 nameamount 记录时,然后填充 action 通过自动引用同一表中 nameamount 匹配的上一个条目。

如果表中不存在nameamount组合,则不填充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/

相关文章:

java - 列数 (1) 与引用键中的列数 (2) 不匹配

mysql - 两个相似的 MySQL 查询给出不同的结果

mysql - Phpmyadmin 没有选择正确的值

sql - 将计算列设置为非 Null 时遇到问题

mysql - SQL 中的子查询有 2 个关系 1 :n

python - 将包含数字和字母的文本行转换为 int

MySQL 游标无法选择获取变量

mysql - 在 MySQL 中的两列上过滤不同的内容

mysql - 2 表列出错误在哪里(帮助)

javascript - ER_CON_COUNT_ERROR : Too many connections error in node-mysql