我的表中有不规范的记录:
ID, CODES 1 |1|2|3|4 2 |5|6|7|8
在第二列中,有int值,保存在varchar字段中,由|分隔。象征。我想使用链接表将它们转换为普通的Many2Many关系形式。所以我想创建一个这样的表
ID CODE 1 1 1 2 1 3 1 4 .... 2 8
我知道我可以遍历mysql存储函数中的记录,拆分字符串和插入值。但是我有兴趣:是否可以在 不使用 存储过程/函数的 情况下 以这种方式转换数据,而仅使用查询(创建表…选择…)?谢谢。
UPD:在不同的行中有可变数量的代码。每行有1到15个代码。
这是它的工作方式,包括测试数据等。
但是请 考虑一下,这只是一个 有趣的 答案。显然要走的路是存储过程或函数或其他任何东西。
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;