我有两张桌子
表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 :(得分: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表
GROUP表
PERSON_GROUP表
答案 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;
我建议您考虑规范化数据 - 在关系数据库中存储逗号分隔列表通常是个坏主意。