mysql用逗号分隔的id连接两个表

标签 mysql sql

我有两张 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/

相关文章:

mysql - 为什么MySQL内连接在as之后找不到列

php - Mysql从统计数据库中获取多个计数

php - 获取数百名申请人中的前 3 条记录

mysql - sql select语句,正确select语句指南

MySQL预订网站: query/db optimization

mysql - 相同的应用程序,不同的数据库 : Entity framework 6. X + MySQL + SQL Server

php - PDO 使用外键获取类

SQL Server 反向运行总计

sql - 如果连接表中没有关联数据,则需要查询返回 Null 字段

mysql - 删除一个表中未被另一个表引用的所有行