MYSQL,这种请求是否可能?

时间:2016-02-18 10:55:13

标签: mysql

我有人(表)有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关键字?

感谢您的反馈。 多米尼克

1 个答案:

答案 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加入,则需要将其添加到子查询中。