MySQL填充另一个表-使用过程或其他方式

时间:2020-09-17 12:53:34

标签: php mysql stored-procedures sql-insert

我的数据库上有两个表。

具有以下结构的称为“ a”的表:

ID  COD     F   L   Q S
1   MI001   1   1   1 E
2   MI002   1   1   1 E
3   MI003   2   2   2 E
4   MI004   1   2   3 E
5   MI005   1   1   1 E

具有这种结构的称为“ b”的表

ID | A_ID | A_ID_NEW

我想要的是,假设我的应用程序上有一个按钮或功能,例如,我从表'a'捕获了ID,而我又捕获了ID'1'和'2'。

所以我将在表a上插入一个新寄存器,该寄存器从id中获取数据,因此表'a'必须如下所示:


ID  COD     F   L   Q S
1   MI001   1   1   1 E
2   MI002   1   2   1 E
3   MI003   2   2   2 E
4   MI004   1   2   3 E
5   MI005   1   1   1 E
6   MI001   1   1   1 T
7   MI002   1   2   1 T

并像下面这样在名为“ b”的表上插入:

ID | A_ID | A_ID_NEW
1  | 1    | 6
2  | 2    | 7

可能吗?

1 个答案:

答案 0 :(得分:2)

CREATE PROCEDURE populate_rows (ids TEXT)
BEGIN
DECLARE id INT;
DECLARE cod CHAR(5);
DECLARE f TINYINT;
DECLARE l TINYINT;
DECLARE q TINYINT;
DECLARE s CHAR(1);
DECLARE done INT DEFAULT FALSE;
DECLARE cur CURSOR FOR SELECT * FROM a WHERE FIND_IN_SET(a.id, ids);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur;
cycle: REPEAT
    FETCH cur INTO id, cod, f, l, q, s;
    IF done THEN
        LEAVE cycle;
    END IF;
    INSERT INTO a VALUES (NULL, cod, f, l, q, 'T');
    INSERT INTO b SELECT NULL, id, MAX(a.id) FROM a;
UNTIL done END REPEAT cycle;
END

fiddle

PS。该过程没有考虑到并行进程的任何干扰或在此过程中可能发生的任何其他问题。

PPS。根据您的实际表结构调整局部变量的数据类型。