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

时间:2013-06-04 03:12:41

标签: mysql sql

我有两张桌子

表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

是否有查询可以实现此目的。非常感谢您的帮助。谢谢。

2 个答案:

答案 0 :(得分:6)

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

PERSON表

  • PersonID(PK)
  • PERSONNAME
  • 其他栏目..

GROUP表

  • GroupID(PK)
  • 组名
  • 其他栏目..

PERSON_GROUP表

  • PersonID(FK)(同时具有列GroupID的PK)
  • GroupID(FK)

答案 1 :(得分: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 Fiddle Demo

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

相关问题