鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 怎么基于一個(gè)表替換結(jié)果中的字符串

怎么基于一個(gè)表替換結(jié)果中的字符串

表a結(jié)構(gòu)如下

column1 column2
abc 1,2,3

表b結(jié)構(gòu)如下

column1 column2
1 a
2 b
3 c

怎么查出結(jié)果為

column1 column2
abc a,b,c
回答
編輯回答
尐懶貓

用find_in_set可以處理, 效率具說(shuō)不咋行

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;
2018年9月5日 02:45
編輯回答
爆扎

自帶的group_concat函數(shù)

2017年9月8日 15:53
編輯回答
局外人

首先要說(shuō)下讓mysql做這種工作簡(jiǎn)直是作死。。
給你一個(gè)拆分的方法,拆完了聯(lián)表再使用group_concat就行了:
例:a表c字段為1,2,3,4,5,6,7,8,將c拆為1-8的數(shù)字
隨便找一個(gè)表t有自增字段id,自增值從1到1000,只要你的逗號(hào)分隔的字串逗號(hào)的個(gè)數(shù)少于這個(gè)1000就可以了,要注意1-1000不跳值,比如1,2,3,4,5,7少了個(gè)6是不行的,執(zhí)行下面的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;

2017年4月10日 21:30