MySQL在运行时更新表的空值

问题描述

我正在尝试使用null值更新表。这是场景:

在我的初始运行中,表格如下所示:

+----+----------+-------+-------+-------+
| id | item     | col_1 | col_2 | col_3 |
+----+----------+-------+-------+-------+
| 1  | abc      | 10    | 20    | 30    |
+----+----------+-------+-------+-------+

但是,在我的后续运行中,表格列将包含如下所示的其他列:

+----+----------+-------+-------+-------+-------+-------+
| id | item     | col_1 | col_2 | col_3 | col_4 | col_5 |
+----+----------+-------+-------+-------+-------+-------+
| 1  | abc      | 10    | 20    | 30    | null  | null  |
+----+----------+-------+-------+-------+-------+-------+
| 2  | ghq      | null  | 40    | null  | 50    | 60    | -- triggers the update of row_1. At the same time should update row_2
+----+----------+-------+-------+-------+-------+-------+
| 3  | xyz      | 70    | 80    | null  | 90    | null  | -- updates row_3 and same updates moving forward
+----+----------+-------+-------+-------+-------+-------+

这是它在后端的工作方式:

  1. 初始运行会创建表格。
  2. 在随后的运行中,它将更改表以添加其他列(col_4和col_5)。
  3. 然后,更新记录,保留一些空单元格。

现在,我想用来自另一个表的数据填充空单元格。

我正在考虑使用触发器,但是正如您在上面看到的那样,要更新的null由下一行触发。另一方面,我不确定存储过程和函数是否可以使用。

我是一个快速学习者,我至少需要一些线索或指南,至少是什么最好的方法?

尝试1:循环存储过程

错误代码:1054。“字段列表”中的未知列“ @col_name”

CREATE DEFINER=`admin`@`%` PROCEDURE `fill_null_values`()
BEGIN
    DECLARE c INT DEFAULT 0;          -- number of columns
    DECLARE r INT DEFAULT 0;          -- number of rows
    DECLARE i INT DEFAULT 0;          -- rows counter
    DECLARE e INT DEFAULT 0;          -- columns counter
    DECLARE col_name VARCHAR(100);    -- bad table column name
    
    /* initialize c = number of columns */
    SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS 
        WHERE TABLE_SCHEMA = 'test_db' AND TABLE_NAME = 'bad_table'
        INTO c;
    
    /* initialize r = number of rows */
    SELECT COUNT(*) FROM bad_table INTO r;
    
    SET i = 0;
    SET e = 7; -- starts at column 7
    SET col_name = ''; 
    
    WHILE i <= r DO                                   
        WHILE e <= c DO

            /* get col_name */
            SET col_name = CONCAT("SELECT COLUMN_NAME
                                   FROM INFORMATION_SCHEMA.COLUMNS 
                                   WHERE TABLE_SCHEMA = 'test_db' 
                                      AND TABLE_NAME = 'canvass_prices'
                                      AND ORDINAL_POSITION = e"); 
               
            /* update null values */
            SET @sql = CONCAT("UPDATE bad_table 
                               SET `",col_name,"` = (
                                   SELECT ref_data FROM ref_table 
                                   JOIN bad_table ON ref_table.id = bad_table.id 
                                   WHERE bad_table.ref_data = i) 
                               WHERE `","` IS NULL");

            PREPARE stmt FROM @sql;
            EXECUTE stmt;
            DEALLOCATE PREPARE stmt;

            SET e = e + 1;
        END WHILE;

        SET i = i + 1;
    END WHILE;    
END

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...