以下是它的工作原理,包含的测试数据等。
但认为,这仅仅是一个乐趣答案。要走的路线显然是存储过程或功能或其他。
drop table testvar;
create table testvar (id int, codes varchar(20));
insert into testvar values (1, '|1|2|3|4'), (2, '|5|6|7|8');
drop table if exists inserttest;
create table inserttest (id int, code int);
select @sql:=left(concat('insert into inserttest values ', group_concat('(', id, ',', replace(right(codes, length(codes) - 1), '|', concat('),(', id, ',')), '),' separator '')), length(concat('insert into inserttest values ', group_concat('(', id, ',', replace(right(codes, length(codes) - 1), '|', concat('),(', id, ',')), '),' separator ''))) -1)
from testvar;
prepare stmt1 from @sql;
execute stmt1;
select * from inserttest;
一个单元中的最大代码数是多少? – biziclop
代码字段中只有四个“列”还是可变的?你的例子只显示4“|”分隔的领域。 –
@biziclop在不同的行中有可变数量的代码。每行有1到15个代码。 – dbf