我有人(表人)有0或N个角色(表角色和 personne_role )。 我想选择所有拥有这些角色的人来获得这样的结果:
PHIL COLLINS | Drummer | Singer
MIKE RUTHERFORD | Singer
ION ANDERSON | Singer
MIKE JAGGER |
CARLOS SANTANA | Guitarist
......
每一行可以有0或N个角色。
为此,我提出2个请求
第一个获得员工的人(表人)
第二个循环所有检索到的员工并检索他们的每个角色(表角色和 person_role )
它的工作原理但是在有很多行的情况下,效率不高。
我想在1个请求中得到相同的结果。
有可能吗? 我必须使用哪些mysql关键字?
感谢您的反馈。 多米尼克
答案 0 :(得分:2)
您可以使用JOIN
GROUP_CONCAT
,例如:
SELECT person.name, role.roles
FROM person
LEFT JOIN (
SELECT person_id, GROUP_CONCAT(DISTINCT role SEPARATOR ' | ') roles
FROM person_role
GROUP BY person_id
) role ON (person.id = role.person_id)
编辑:字段名称只是猜测,因为您没有向我们展示完整的表格架构;另外,如果角色实际上是在一个单独的故事中,比如用role_id
加入,则需要将其添加到子查询中。