源表结构 表名:t 主键:id
id | name |
1 | China |
2 | America |
3 | England |
目标表表结构表名:zz 主键:name
name |
China,America |
China,England |
America,England |
解决思路:根据组合的原理,一步一步实现
解决步骤:
第一步:以id,name为游标,
第二步:以id为判断值,表t中id 大于当前游标值c_id时,对c_name、id大于当前游标值c_id的name进行concat操作
大致code:
delimiter //
create procedure xxm_test()
begin
declare c_id int;
declare c_name varchar(10);
declare done int default 0;
declare max_id int;
declare c1 cursor for select id,name from twhere id < max_id;
declare continue handler for not found setdone=1;
select max(id) into max_id from t ;
open c1;
tc:repeat
/*推送游标*/
fetch c1 into c_id,c_name;
/*跳出循环的条件*/
if done=1
then
leave tc;
end if;
/*组合值更新到目标表zz*/
insert into zz select concat_ws(',',c_name,name)from t where t.id >c_id;
until done=1
end repeat tc;
close c1;
set done=0;
end //
delimiter ;
问题:上述只实现了c x 2的组合,若是c 5 3 这种的呢???就是如何区别类‘1,2,3’和‘1,3,2‘呢?谁有好的方法,还请不吝赐教啊!!!