Hier is hoe het werkt, inclusief testgegevens, enzovoort.
Maar bedenk dat dit gewoon een leuke is antwoorden. De weg te gaan is duidelijk een opgeslagen procedure of een functie of wat dan ook.
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;