MySQL-实现C 3 2 组合

源表结构  表名: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‘呢?谁有好的方法,还请不吝赐教啊!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值