MySQL中具有字符串的列要拆分并插入/更新到新表中的存储过程

MySQL中具有字符串的列要拆分并插入/更新到新表中的存储过程,mysql,stored-procedures,Mysql,Stored Procedures,我需要根据另一个表中的信息插入/更新表中的行。下面我将通过一个例子来说明我的要求 下表是我希望根据表名tab1中的数据更新/插入数据的位置 tab1_id | tab1_question_id | tab1_sectorID | tab1_NC_id 1 | 101 | 11 | 21 tab2_id | tab2_question_id | tab2_sectorID | tab2_NC_ids |import_complete

我需要根据另一个表中的信息插入/更新表中的行。下面我将通过一个例子来说明我的要求

下表是我希望根据表名tab1中的数据更新/插入数据的位置

tab1_id | tab1_question_id | tab1_sectorID | tab1_NC_id

1       | 101              | 11            | 21
tab2_id | tab2_question_id | tab2_sectorID | tab2_NC_ids |import_complete

1       | 101              | 11            | 21,22,23     | 0
2       | 102              | 11            | 22,23,24     | 0
3       | 103              | 11            | 22,24,25     | 0
下表是我要复制数据并将其导入表的位置tab1

tab1_id | tab1_question_id | tab1_sectorID | tab1_NC_id

1       | 101              | 11            | 21
tab2_id | tab2_question_id | tab2_sectorID | tab2_NC_ids |import_complete

1       | 101              | 11            | 21,22,23     | 0
2       | 102              | 11            | 22,23,24     | 0
3       | 103              | 11            | 22,24,25     | 0
  • tab2_NC_ID具有不同NC的值,用逗号分隔。现在,我尝试将这些值插入表1
  • 例如,在选项卡1中,问题id101和NC\u id21已经存在。因此,该行不应与相同的问题id和NC id重复
  • 我想从选项卡2中拆分NC_ID,并根据选项卡1中存在的数据插入/更新每一行
在这个问题中,我不仅尝试拆分值,而且还拆分它们并将值分配给新表,保持关系不变,这必须动态完成


我怎样才能做到这一点。我正试图在MySQL中为上述内容创建一个存储过程,但没有找到任何可能的解决方案,因为NC_ID是用逗号连接的。任何帮助都会很好,谢谢。

我找到了解决问题的可能方法

首先,我创建一个临时表,以便将拆分的值与其外键一起存储在临时表中,以便稍后用户可以连接并在新表中插入值

CREATE TEMPORARY TABLE IF NOT EXISTS `db`.`temp_table` (
  `temp_table_id` INT(5) NOT NULL AUTO_INCREMENT,
  `tab_question_id` INT(5) NULL,
  `tab_sector_id` INT(5) NULL,
  `tab_NC_ids` INT(5) NULL,
   PRIMARY KEY (`temp_table_id`));
上面的代码将创建一个临时表,现在基于临时表,我将在临时表中插入所有拆分值

INSERT into db.temp_table (tab_question_id,tab_NC_id)
     (select  tab2_question_id,tab_sector_id,tab2_NC_id, 
     from db.tab1 a, db.tab2 b
     where b.import_complete = 0
     and find_in_set(a.tab1_id, replace(b.tab2_NC_ids, ' ', '')));
现在我已将数据拆分并输入临时表。现在我可以使用join并将数据插入tab1表

INSERT INTO db.tab1(tab1_question_id, tab1_sector_id. tab1_NC_id)
(Select tNC.tab_question_id, tNC.tab_sector_id, tNC.tab_NC_id
from db.temp_table tNCO);
插入完成后,我将删除临时表

 DROP TABLE temp_table;

提示:normilize不能在新表中使用逗号分隔的值。可能存在重复的