MySQL 数字辅助表去重、排序、行转列

来源:互联网 发布:阿里云服务器ecs配置 编辑:程序博客网 时间:2024/04/29 09:31
一、需求
一个字段有多行记录,查询结果为去重排序的一行记录,例如记录值为:
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;  


0 0
原创粉丝点击