2013-06-04 35 views
6

我有两个表MySQL的连接两个表逗号分隔IDS

表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 

有一个查询与我能做到这一点。非常感谢您的帮助。谢谢。

+0

可能重复的[我可以连接多个MySQL行到一个字段?](http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field) – Thomas

回答

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 ║ 
╚══════════╩═════════════════╝ 

作为旁注,此查询可能无法按预期有效执行。请不要保存由逗号分隔的值,以正确地标准化表格。

UPDATE

GROUP_ID是非常混乱。是不是PersonIDList?总之,这里是我的建议的架构设计:

Person表

  • 是PersonID(PK)
  • PERSONNAME
  • 等栏目..

组表

  • 的GroupID(PK)
  • 组名其他
  • 列..

PERSON_GROUP表

  • 是PersonID(FK)(在与柱的GroupID同时PK)
  • 的GroupID(FK)
+1

这很棒,尽管观察性能很重要。 +1 – KaeL

+0

+1和OP应尽可能修复数据结构。 – Fallexe

+1

感谢您的回答和建议。以前的开发人员在这个小软件上工作搞砸了表结构。但肯定我会考虑正常化表格。再次感谢。 – user2442377

1

我喜欢由于FIND_IN_SET选项你正在使用MySQL,但是这里有一个替代解决方案,在JOIN中使用LIKE

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

我建议你看看你的正常化数据 - 存储在关系数据库中的逗号分隔的列表通常是一个坏主意。

+0

感谢您的选择。 – user2442377