以下是它的工作原理,包含的測試數據等。
但認爲,這僅僅是一個樂趣答案。要走的路線顯然是存儲過程或功能或其他。
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