版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzy0623/article/details/53895786
一、需求 一个字段有多行记录,查询结果为去重排序的一行记录,例如记录值为: 1,2,4 1,4,5 2,3 23,56,67 3,4 要求查询结果为: 1,2,3,4,5,23,56,67 二、方案 使用数字辅助表实现
-- 建立数字辅助表 create table nums ( a int not null primary key ); delimiter $$ create procedure pFastCreateNums(cnt int) begin declare s int default 1; truncate table nums; insert into nums select s; while s<=cnt do insert into nums select a+s from nums where a+s <= cnt; set s=s*2; end while; commit; end $$ delimiter ; call pFastCreateNums(1000000); -- 建立测试表 create table t1 ( a varchar(100) ); insert into t1 values('1,2,4'),('1,4,5'),('2,3'),('23,56,67'),('3,4'); commit; -- 查询 select group_concat(a) from (select a from (select cast(substring_index(substring_index(t1.a, ',', nums.a), ',', - 1) as unsigned) a from t1, nums where nums.a <= length(t1.a) - length(replace(t1.a, ',', '')) + 1) t group by a) t1;
本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。
我来说两句