首页 > 解决方案 > MySQL,通过连接表与 in 子句连接

问题描述

有没有办法加入两张桌子并得到group_concatid我有两张表,第一张带有name以下数据:

ID 姓名
1 约翰
2 标记
3 海伦
4 西蒙

第二个表格包含以下数据:

ID 团队 数量
1 星期一 2,4 100.00
2 星期一 1,4 80.00
3 星期五 2,3 150.00
4 太阳 1,3,4 120.00
5 3 40.00

team字段具有逗号分隔字符串中的成员 ID。

如何连接名称,在一列中用逗号分隔?

要求的结果:

ID 团队 数量
1 星期一 马克,西蒙 100.00
2 星期一 约翰,西蒙 80.00
3 星期五 马克,海伦 150.00
4 太阳 约翰、海伦、西蒙 120.00
5 贺兰 40.00

我尝试group_concat了以下代码,但它不起作用:

select b.*, (select group_concat(a.name separeted ',')
from a where a.id in (b.team)) as teamname from b

有什么建议么?

在此先感谢您的帮助。

标签: mysqlconcatenation

解决方案


使用FIND_IN_SET代替IN

CREATE TABLE a
    (`id` int, `name` varchar(5))
;
    
INSERT INTO a
    (`id`, `name`)
VALUES
    (1, 'John'),
    (2, 'Mark'),
    (3, 'Helen'),
    (4, 'Simon')
;
CREATE TABLE b
    (`id` int, `day` varchar(3), `team` varchar(5), `amount` int)
;
    
INSERT INTO b
    (`id`, `day`, `team`, `amount`)
VALUES
    (1, 'mon', '2,4', 100.00),
    (2, 'mon', '1,4', 80.00),
    (3, 'fri', '2,3', 150.00),
    (4, 'sun', '1,3,4', 120.00),
    (5, 'wen', '3', 40.00)
;
select 
b.*
, (select group_concat(a.name ) 
from a 
where FIND_IN_SET(a.id, b.team) > 0) as teamname 
from b
编号 | 天 | 团队 | 金额 | 队名        
-: | :-- | :---- | -----: | :---------------
 1 | 星期一 | 2,4 | 100 | 马克,西蒙      
 2 | 星期一 | 1,4 | 80 | 约翰,西蒙      
 3 | 星期五 | 2,3 | 150 | 马克,海伦      
 4 | 太阳 | 1,3,4 | 120 | 约翰、海伦、西蒙
 5 | 文 | 3 | 40 | 海伦           

db<>在这里摆弄


推荐阅读