MySQL中具有字符串的列要拆分并插入/更新到新表中的存储过程
我需要根据另一个表中的信息插入/更新表中的行。下面我将通过一个例子来说明我的要求 下表是我希望根据表名tab1中的数据更新/插入数据的位置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_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不能在新表中使用逗号分隔的值。可能存在重复的