我有两张 table
表一
ID NAME
1 Person1
2 Person2
3 Person3
表2
ID GROUP_ID
1 1
2 2,3
以上所有列中的 ID 均指代相同的 ID(示例 - 部门)
我的预期输出(通过连接两个表)
GROUP_ID NAME
1 Person1
2,3 Person2,Person3
是否有可以实现此目的的查询。非常感谢您的帮助。谢谢。
最佳答案
您可以在此使用 FIND_IN_SET()
和 GROUP_CONCAT()
,
SELECT b.Group_ID, GROUP_CONCAT(a.name) name
FROM Table2 b
INNER JOIN Table1 a
ON FIND_IN_SET(a.ID, b.Group_ID) > 0
GROUP BY b.Group_ID
输出
╔══════════╦═════════════════╗
║ GROUP_ID ║ NAME ║
╠══════════╬═════════════════╣
║ 1 ║ Person1 ║
║ 2,3 ║ Person2,Person3 ║
╚══════════╩═════════════════╝
作为旁注,此查询可能无法按预期高效执行。请通过不保存以逗号分隔的值来正确规范化您的表格。
更新
GROUP_ID
非常令人困惑。不是PersonIDList
吗?不管怎样,这是我建议的模式设计:
人员表
- PersonID (PK)
- 人名
- 其他专栏..
组表
- 组 ID(PK)
- 组名
- 其他专栏..
PERSON_GROUP 表
- PersonID (FK)(同时与 GroupID 列 PK)
- 组 ID(FK)
关于mysql用逗号分隔的id连接两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16909248/