需求:
由目标表testtt
得到分隔后的数据
步骤一:
创建中间表test
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
添加数据
insert into `test` (`id`, `name`) values('0',NULL);
insert into `test` (`id`, `name`) values('1',NULL);
insert into `test` (`id`, `name`) values('2',NULL);
insert into `test` (`id`, `name`) values('3',NULL);
insert into `test` (`id`, `name`) values('4',NULL);
insert into `test` (`id`, `name`) values('5',NULL);
insert into `test` (`id`, `name`) values('6',NULL);
insert into `test` (`id`, `name`) values('7',NULL);
insert into `test` (`id`, `name`) values('8',NULL);
insert into `test` (`id`, `name`) values('9',NULL);
insert into `test` (`id`, `name`) values('10',NULL);
insert into `test` (`id`, `name`) values('11',NULL);
insert into `test` (`id`, `name`) values('12',NULL);
步骤二:
创建目标表testtt
CREATE TABLE `testtt` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`value` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8
添加数据
insert into `testtt` (`id`, `value`) values('1','1,2,3');
insert into `testtt` (`id`, `value`) values('2','4,5');
insert into `testtt` (`id`, `value`) values('3','6');
insert into `testtt` (`id`, `value`) values('4','7,8');
步骤三:
编写sql
SELECT
a.id,
SUBSTRING_INDEX( SUBSTRING_INDEX( a.value, ',', b.id + 1 ), ',', -1 ) AS VALUE
FROM testtt a
JOIN test b ON b.id < ( LENGTH( a.value ) - LENGTH( REPLACE ( a.value, ',', '' ))+ 1 )
sql注意点:
1,test表的行数要大于需要拆分字段拆分后的数量(这里是单条数据拆分后的数量),否者会少数据文章来源:https://www.toymoban.com/news/detail-817290.html
2,test表id需要从0连续的,否则也会少数据文章来源地址https://www.toymoban.com/news/detail-817290.html
到了这里,关于mysql把以逗号连接的字段拆分成列表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!