我有两个表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
有一个查询与我能做到这一点。非常感谢您的帮助。谢谢。
我有两个表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
有一个查询与我能做到这一点。非常感谢您的帮助。谢谢。
您可以使用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表
组表
PERSON_GROUP表
这很棒,尽管观察性能很重要。 +1 – KaeL
+1和OP应尽可能修复数据结构。 – Fallexe
感谢您的回答和建议。以前的开发人员在这个小软件上工作搞砸了表结构。但肯定我会考虑正常化表格。再次感谢。 – user2442377
我喜欢由于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;
我建议你看看你的正常化数据 - 存储在关系数据库中的逗号分隔的列表通常是一个坏主意。
感谢您的选择。 – user2442377
可能重复的[我可以连接多个MySQL行到一个字段?](http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field) – Thomas