怎么基于一个表替换结果中的字符串

表a结构如下

column1 column2
abc 1,2,3

表b结构如下

column1 column2
1 a
2 b
3 c

怎么查出结果为

column1 column2
abc a,b,c
阅读 2.7k
3 个回答

用find_in_set可以处理, 效率具说不咋行

create table a (
  id int primary key auto_increment,
  column1 varchar(50),
  column2 varchar(100)
) engine = InnoDB;

insert into a values (1, 'abc', '1,2,3');

create table b (
    id int primary key auto_increment,
    column1 int default 0,
    column2 varchar(10) default ''
) engine = InnoDB;

insert into b values (1, 1, 'a');
insert into b values (2, 2, 'b');
insert into b values (3, 3, 'c');


select a.column1, (select group_concat(b.column2) as column2 from b where find_in_set(b.column1, a.column2)) as column2 from a;
新手上路,请多包涵

自带的group_concat函数

首先要说下让mysql做这种工作简直是作死。。
给你一个拆分的方法,拆完了联表再使用group_concat就行了:
例:a表c字段为1,2,3,4,5,6,7,8,将c拆为1-8的数字
随便找一个表t有自增字段id,自增值从1到1000,只要你的逗号分隔的字串逗号的个数少于这个1000就可以了,要注意1-1000不跳值,比如1,2,3,4,5,7少了个6是不行的,执行下面的sql就可以将c字段拆分成1-8的值
SELECT substring_index(substring_index(a.c,',',t.id),',',-1)
FROM a join t
ON t.id<=CHAR_LENGTH(a.c)-CHAR_LENGTH(REPLACE(a.c,',',''))+1;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题