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

发布于 2022-09-06 07:41:06 字数 619 浏览 22 评论 0

表a结构如下

column1column2
abc1,2,3

表b结构如下

column1column2
1a
2b
3c

怎么查出结果为

column1column2
abca,b,c

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

假装爱人 2022-09-13 07:41:06

用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;
不及他 2022-09-13 07:41:06

自带的group_concat函数

拥抱我好吗 2022-09-13 07:41:06

首先要说下让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;

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文