5

我有两张桌子

表格1

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

有没有我可以做到这一点的查询。非常感谢您的帮助。谢谢你。

4

2 回答 2

9

您可以在此使用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吗?无论如何,这是我建议的架构设计:

人表

  • 个人ID (PK)
  • 人名
  • 其他栏目..

组表

  • 组 ID (PK)
  • 团队名字
  • 其他栏目..

PERSON_GROUP 表

  • PersonID (FK)(同时与GroupID列PK)
  • 组 ID (FK)
于 2013-06-04T03:16:16.107 回答
1

我喜欢这个FIND_IN_SET选项,因为您使用的是 MySQL,但这里有一个替代解决方案,它也可以LIKE在以下环境中使用JOIN

select t2.group_id, group_concat(t1.name order by t1.name separator ',' ) name
from t1 inner join t2 
  on concat(',',t2.group_id,',') like concat('%,',t1.id,',%') 
group by t2.group_id;

SQL 小提琴演示

我建议你考虑规范化你的数据——在关系数据库中存储一个逗号分隔的列表通常是一个坏主意。

于 2013-06-04T03:27:30.373 回答