mysql - MySQL,通过连接表与 in 子句连接
问题描述
有没有办法加入两张桌子并得到group_concat
?id
我有两张表,第一张带有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
有什么建议么?
在此先感谢您的帮助。
解决方案
使用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<>在这里摆弄
推荐阅读
- go - 如何使用 SQLBoiler 执行多对多查询
- r - ggmap 的问题
- javascript - 子组件reactjs的动态道具
- python - 我有一个 python 列表作为字符串,我想将它打印为间隔和顺序
- http - 使用正则表达式将网页中的内容提取到变量中(WEB场景一步一步)
- google-bigquery - 需要通过 IR 连接 ADF 和 BigQuery
- node.js - 如何自动将环境变量应用到“npm install”过程?
- sql-server - 执行速度比 Sql OpenQuery 慢
- java - 如何拥有一个接受接口的构造函数?
- linux - CMake 错误“包含找不到加载文件:FetchContent”